普通函数:this指向调用它的对象
- 对象中部分属性值为函数:
var name = 'window'
var person1 = {
name: 'person1',
show1: function () {
console.log(this.name)
},
show2: () => console.log(this.name),
show3: function () {
return function () {
console.log(this.name)
}
},
show4: function () {
console.log(this.name)
return () => console.log(this.name)
}
}
var person2 = { name: 'person2' }
- 输出结果
person1.show1() // person1
person1.show1.call(person2) // person2
person1.show2() // window
person1.show2.call(person2) // window
person1.show3()() // window
person1.show3().call(person2) // person2
person1.show3.call(person2)() // window
person1.show4()() // person1 person1
//从这里可以看到,两个this的指向一样。
person1.show4().call(person2) // person1 person1
person1.show4.call(person2)() // person2 person2
- 总结
构造函数的过程:
- 创建新对象
- 将构造函数的作用域赋给新对象(this指向了新对象)
- 执行构造函数代码(为这个新对象添加属性)
- 返回新对象