2014-02-18 31 views
-2

我試圖創建對象不同的方式,並試圖觀察以各種方式創建的對象的原型屬性。「原型」屬性不適用於所有的對象創建方式

var a = {a: 1}; 
//The prototype chain as mentioned in [here][1] 
// a ---> Object.prototype ---> null 

現在,我觀察到a.prototype是未定義的。 問題1:如果未定義,那麼原型鏈是如何形成的? a.hasOwnProperty因爲原型鏈而存在。

現在,如果我說:

var myFunc = function(){}; 
// Prototype chain: myFunc ---> Function.prototype ---> Object.prototype ---> null 

創造的這種方式,myFunc.prototype存在。

問題2:爲何存在這種差異?

+1

'prototype'是一個只有函數纔有的特殊屬性。 –

+0

構造函數具有原型,您可以使用Object.create創建一個(空或第二個參數)對象與傳遞的對象(第一個參數)作爲用於查找原型鏈的第一個原型。更多關於這是如何工作的:http://stackoverflow.com/a/16063711/1641941 – HMR

回答

2

prototype屬性不是對象的原型。這是(通常)__proto__屬性,雖然我不認爲任何版本的ECMAScript標準都需要該屬性。函數Fooprototype屬性是將用作由new Foo()生成的對象的原型的對象。

+0

儘管'.__ proto__'在大多數瀏覽器中都被棄用,我相信ES6會加入對該屬性的全面支持,作爲一個神奇的(可變的)的getter/setter。 – Norguard