js中this指向問題: (object.getName = object.getName)()爲什麼返回「window」

var name = "The Window";
var object = {
    name : "My Object",
    getName: function(){
         console.log(this.name);
    }
};
object.getName();  //My Object
(object.getName = object.getName)(); //"The Window"

輸出My Object的緣由,就不談了啊。
最後一行輸出結果,js高級程序一書中一筆帶過,不理解的小夥伴能夠看下:函數

object.getName = object.getName;這是個賦值語句,賦值語句返回的是後者,
舉例:
return a = b; (返回的是b),這點以後論證
那麼首先:this

(object.getName = object.getName)();     //"The Window" 
//等價於
(object.getName = function(){
    console.log(this.name);
})();      //"The Window"

並且賦值語句返回是後者,那麼就是:code

(object.getName = object.getName)();     //"The Window" 
//等價於
(function(){
    console.log(this.name);
})();      //"The Window"

其實,括號裏就是一個匿名函數,直接在全局環境當即執行,天然this.name就是全局環境中的name變量的值。get


論證賦值表達式,返回值是後者,借鑑自網上看到的方法:io

var test = {
    set  num(param){},
    get  num(){
        return 20;
    },
};
function change(arg){
    return test.num = arg;
}
console.log(change(10));   //輸出10
console.log(test.num);     //輸出20

change函數運行後,輸出的是賦值語句的後者arg的值10(此時test.num值是20)。console

相關文章
相關標籤/搜索