2011-06-12 114 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