[JavaScript] this的指向 (1) [非嚴格模式]

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章