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