2011-06-12 110 views
3

在下面的文章中,Douglas Crockford創建了一個函數來更接近地模擬JavaScript中的原型繼承(http://javascript.crockford.com/prototypal.html)。我理解這個概念。但是,一旦使用下面的函數創建了一個新對象,那麼除了使用點/下標符號之外,您如何向該對象添加方法和屬性。在我看來,其中的任何一個都會產生難看的代碼。Crockford原型繼承

if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     function F() {} 
     F.prototype = o; 
     return new F(); 
    }; 
} 

newObject = Object.create(oldObject); 

然後我需要使用下列符號嗎?

newObject.method1 = function(){} 
newObject.cnt = 1; 
... 

有沒有其他人發現這是一種醜陋的方式來添加屬性和方法的對象?

我明白我可以在技術上傳遞一個函數,爲此我想設置原型,使用所有的方法和變量。

我或多或少地想知道Crockford如何使用該功能。

回答

3
var prototypeForNewObject = { 
    method: function (x) { ... }, 
    prototypeProperty: 42 
}; 

var newObject = Object.create(prototypeForNewObject); 

// Adding an instance property 
newObject.cnt = 1; 

而不是用瓦罐的版本而且,我會用全部的EcmaScript 5簽名,其中包括一個可選的propertiesObj參數。請參閱https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create

您可能會在該鏈接中找到示例。

+0

很高興知道。這或多或少是我期望的功能簽名的樣子。試圖瞭解Crock如何使用功能。 – Steve 2011-06-12 16:51:16

+0

WTF是你的頭像? – Steve 2011-06-12 16:51:33

+2

@Steve,您理解他的意圖的最好方法可能是發送一封電子郵件給您鏈接的頁面頂部的地址。我的頭像是一個塞滿了(而且很胖)的t-rex,吃着一罐蔬菜。霸王龍的前肢不擅長打開罐子,所以它必須把整個罐子都吃掉。 – 2011-06-12 17:05:37