this指针的指向问题
- 永远指向函数运行时所在的对象,而不是函数被创建时所在的对象
- 简单来说就是:谁调用this,此时this就是谁
this指针的应用以及对象
函数调用
当一个函数并非一个对象的属性时,那么它就是被当做函数来调用的。在此种模式下,this被绑定为全局对象,在浏览器环境下就是window对象。
例子:
function test(){
console.log(this)
}
window.test()
效果展示:
构造函数
如果在一个函数前面加上new关键字来调用,那么就会创建一个连接到该函数的prototype成员的新对象,同时,this会被绑定到这个新对象上。这种情况下,这个函数就可以成为此对象的构造函数。
例子:
function Person(name,age){
this.name=name;
this.age=age;
this.eat=function(){
console.log('eating');
console.log(this)
}
}
let p1 = new Person('李四',12);
console.log(p1.name);
效果展示:
方法调用
当函数被创建为对象的一个属性时,它就称为这个对象的方法。当它被调用时,this被绑定到对象上。如果调用表达式包含一个提取属性的动作,那么它被称为方法调用。
例子:
var name = "window";
var obj = {
name: "kxy",
sayName: function() {
console.log(this.name);
}
};
obj.sayName();
效果展示
参考文献