以下JavaScript代碼對我來說非常混亂。任何人都可以幫助我理解。 PersonY爲什麼沒有原型屬性。功能與新功能的JavaScript區別
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
以下JavaScript代碼對我來說非常混亂。任何人都可以幫助我理解。 PersonY爲什麼沒有原型屬性。功能與新功能的JavaScript區別
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
PersonX = function(){};
地方的引用匿名函數成PersonX
。 PersonX
指向一個函數。
PersonY = new function(){};
地方的引用一個匿名構造函數的一新構造的實例爲PersonY
。 PersonY
指向一個對象。
關於原型,PersonY
有一個。但是,由於沒有附加到構造函數before和after實例的屬性和方法,所以它具有空白原型 *。
您可以通過執行console.log(PersonY)
實際檢查PersonY
的原型。你會看到它有一個原型屬性(我在Chrome中看到它爲__proto__
),它是「空白」的。但它有2個隱藏屬性,constructor
是構成函數的對象,另一個是__proto__
,它引導您到下一個「鏈接」,它將成爲Object
對象。
*因爲原型是一個鏈條,所以不是真正的空白。這個原型級別可能是空白的,但是更高級的原型可能具有,或者在這種情況下,具有屬性和方法。
Object prototype -> Constructor prototype -> Your Instance will have:
- toString() - blank - toString()
- hasOwnProperty() - hasOwnProperty()
- and more... - and more...
- ...but nothing from Constructor
這是因爲它實際上是在內存中實例化功能的副本的對象;原型在創建實例的過程中確實只有意義,所以一旦創建它,就沒有合乎邏輯的構思。
使用'function',而不是'new function'。 –
只要做[永遠不要使用第二個構造](http://stackoverflow.com/q/10406552/1048572)。 – Bergi