this的指向在函数定义的时候是不能确定的,只有在函数执行的时候才能确定它的指向。
实际上this的指向的是调用它的那个对象。
例一:
function user() {
var name = "憨憨";
console.log(this.name); // ""
console.log(this); // window
}
user(); // 等价于 window.user();
this最终指向的是调用它的对象,user这个方法是被window调用的,所以this指向了window。
例二:
var oo = {
name: "憨憨",
sayHello: function () {
console.log("Hello, " + this.name); // Hello, 憨憨
}
}
oo.sayHello();
oo这个对象调用了sayHello这个方法,所以this指向的是oo这个对象。
例三:
var oo = {
name: "憨憨",
bb: {
name: "铁憨憨",
sayHello: function () {
console.log("Hello, " + this.name); // Hello, 铁憨憨
}
}
}
oo.bb.sayHello();
同理可知,bb这个对象调用了sayHello这个方法,所以this对象指向的是bb。
例四:
var oo = {
name: "憨憨",
sayHello: function () {
console.log(this.name); // ""
console.log(this); // window
}
}
var bb = oo.sayHello;
bb();
这里变得有些不一样了,为什么this不再是oo了?因为这里是赋值的操作,并没有执行。
最终执行还是window调用的sayHello方法,所以这里的this指的是window。
总结:
简单来说,就是this指向直接调用他的那个对象。
this总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象。
参考文章:
彻底理解js中this的指向,不必硬背
https://www.cnblogs.com/pssp/p/5216085.html