javascript语言精萃-精读

编程是很困难的事情。绝不应该在懵懵懂懂的状态下开始你的工作。
所谓编程,就是将一组需求分解成一组函数与数据结构的技能。

附加知识点:
xey: 表示10的y次方乘以x的值
例如: 1e2 = 10的平方乘以1 = 100
检测一个属性是来自于该对象的成员还是来自原型链,可以使用obj.hasOwnProperty(attr)
如果没有指定返回表达式,那么返回值是undefined。

需要弄懂的点:

  1. 函数式编程
  2. this指针
第三章 对象
const obj = {
	name: 'amy',
	age: 100,
	happy: true
}

对象字面量:
如果是合法的非关键字,那对象的属性名就可以不用双引号,否则属性名需要加双引号。
检索:
可以通过[], . 的形式来获取属性值,一般使用. , 因为简洁直观,但在属性名不合法或者是以保留关键字命名时,需要使用[]
更新

obj.name = 'aliveAmy'; //修改值
obj.gender =  'female'; //添加新属性

原型

	Object.create = function(o) {
		const Fun = function(){};
		Fun.prototype = o;
		return  new Fun()
	}

const another_amy = Object.create(obj);
another_amy.name  // amy
another_amy.name = aliveAmy
another_amy.name  // aliveAmy
delete another_amy.name  暴露原型属性
another_amy.name  // amy

反射

typeof obj.name //string
typeof obj.age //number
typeof obj.happy //boolean

typeof.toString //function
typeof constructor //function

大多时候只关心数据, 所有要删除对象中冗余的方法时,有两种方式:
1. typeof xxx === function
2. obj.hasOwnProperty(xxx) //这个方法不会去检查原型

枚举
遍历出所有对象的key值,但是不会按顺序排列,可以用for in

for (attr in obj) {
	console.log(attr); //属性随机排列。
}

删除

delete obj.gender

减少全局变量污染
有两种方式可以参考:
1. 只设置一个全局变量, 所用到的所有变量都在该对象下。与其他组件发生冲突的可能性会降低。
2. 闭包进行信息隐藏。

第四章

调用:
在js中一共有4种调用模式:
这些模式在如何初始化关键参数this上存在差异。

方法调用模式

当一个函数被保存为对象的属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作,那它就是被当作一个方法来调用。

函数调用模式

当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的,以此模式调用函数时,this被绑定到全局变量。

window.name = 'aliveAmy'
const nameObj =  {
	name: 'amy',
	getAttr: function() {
		console.log('方法式调用',this.name);
		const that = this;
		getName = function() {
			console.log('函数式调用, this指向全局对象', this.name); //aliveAmy
			console.log('函数式调用,改变this指针指向', that.name);  //amy
		}
		getName() //函数式调用  'amy'
	}
}
nameObj.getAttr();
构造器调用模式

使用new关键字实例化一个构造器时,将会创建一个连接到该函数的property成员的新对象,同时this会被绑定到这个新对象上。

	function User() {
		this.name = 'amy'
	}
const user = New User;  //这时候构造器User的this绑定到 user这个对象上,所以 this.name='amy' 其实就是等于 user.name = 'amy'。

function User1() {
		this.name = 'amy'
		return {}
}

function User2() {
		this.name = 'amy'
		return function() {}
}

function User2() {
		this.name = 'amy'
		return true
}
当构造器有return时,假如return的值为对象, 则this绑定到return的对象上, 如果不是对象, 则还是绑定在实例化构造器的对象上。
apply调用模式

apply方法让我们创建一个参数数组传递给调用函数。它也允许我们选择this的值。apply 方法接收两个参数,第一个是绑定给this的值,第二个就是一个参数数组。

猜你喜欢

转载自blog.csdn.net/xieamy/article/details/100415890