2014-07-04 48 views
1

爲什麼創建一個名爲「構造函數」的鍵似乎改變了「this」的行爲?拿這個代碼,例如:爲什麼創建一個名爲「構造函數」的鍵似乎改變了「this」的行爲?

var O = { 
    constructor: function f1(){}, 
    k2: function f2(){return this;} 
}; 

console.log(O.k2());//logs "f1" 

人們會認爲「這」將是「對象」,因爲它是一個對象中的文字,但如果我使用名稱「構造」作爲關鍵突然在函數內部它成爲「這個」。如果我嘗試了這一點,我得到「對象」:

var O = { 
    k1: function f1(){}, 
    k2: function f2(){return this;} 
}; 

console.log(O.k2());//logs "Object" 

是否鍵值名「構造」有特殊的行爲,如_原_和原型?我真的不明白爲什麼「this」會附加到函數f1。

+4

這是一個正常的行爲。從[** MDN **](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor):*「返回創建對象函數的引用請注意,該屬性的值是對函數本身的引用,而不是包含函數名稱的字符串。「*。 – VisioN

+0

我明白了,所以它覆蓋了已經存在的構造函數屬性(引導「this」引用的屬性)。這就是它的樣子。謝謝。我會更多地考慮這一點。 –

回答

0

是的,constructor是創建原型的函數。 Reference

相關問題