构造函数中this的指向
相关代码
最近在读js高级编程,有点迷惑的地方。
在普通的函数中,this是指向全局作用域的:
var name = 'moon';
function sayName(){
var name = 'star';
console.log(this.name); //moon
}
但是在构造函数里,this是指向谁:
function Person(name, age){
this.name = name; //这里为啥可以这样写,不太明白,虽然我也这样写
this.age = age;
}
var p1 = new Person('sun', 22);
书上写的是: 将构造函数的作用域赋给新对象,因此this指向了这个新对象。为什么第一种情况this是全局作用域,而第二种情况就成了函数作用域了呢,求解惑
单就你题目中的两个例子,this都是在运行时才能确定的:即看他们执行时绑定在什么对象上,那个this就代指那个对象。
如果你直接执行,它相当于在全局执行,默认绑定在window对象上(此处先不讨论严格模式),故this是window。
var name="moon"
在全局定义的,那么它就是window的一个属性,相当于window.name="moon"
。若你执行 sayName.call({name: 'sun'}), 即将sayName绑定在对象{name: 'sun'}上执行,那么this就是这个sun对象。
new操作符执行后,会创建一个空对象 {}, 然后类似于执行了
当然new做的操作不止这些,还有设置原型链,不在此问题讨论范围内。