2017-06-02 168 views
0

爲什麼在窗口範圍內調用Person返回「[Object Object]」,而在對象範圍內調用返回Object。爲什麼窗口範圍內的調用函數與對象範圍不同

enter image description here

enter image description here

+0

嘛,乾脆不要做'Person.call(窗口,...)'。這將嘗試設置'window.name'。不,這與範圍無關 - 如果您引用'this'關鍵字,那就是調用的* context *或* receiver *。 – Bergi

回答

0

window.name是吸氣/設置器設置窗口的名稱。因此,它必須是string

試試這個:

你會看到,現在window.name設置爲"something,else";這是Array.toString()的結果。

這正是這裏發生的情況。當您撥打objecttoString時,會得到[object Object]

如果您不使用預定義的window.name getter/setter,則您的程序可以正常工作。

function Person(first, last) { 
 
    this.something = { 
 
     first, 
 
     last 
 
    }; 
 
} 
 

 
f = {}; 
 

 
Person.call(f, "fsd", "fsd"); 
 
console.log(f.something); 
 

 
g = window; 
 
Person.call(g, "fsd", "fsd"); 
 
console.log(g.something);

更多的getter/setter方法在javascript:

二傳手:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/set

吸氣劑:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get