克罗克福德原型继承

时间:2011-06-12 16:33:21

标签: javascript

在下面的文章中,Douglas Crockford创建了一个函数来更接近地模拟JavaScript中的原型继承(http://javascript.crockford.com/prototypal.html)。我理解这个概念。但是,一旦使用下面的函数创建新对象,除了使用点/下标表示法之外,如何向该对象添加方法和属性。在我看来,其中任何一个都会产生丑陋的代码。

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打算如何使用该功能。

1 个答案:

答案 0 :(得分:3)

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

var newObject = Object.create(prototypeForNewObject);

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

而不是使用Crock的版本,我将使用包含可选propertiesObj参数的完整EcmaScript 5签名。见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create

您可能会在该链接上找到提供信息的示例。