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