【问题标题】:Crockford Prototypical InheritanceCrockford 原型继承
【发布时间】:2011-06-13 00:55:32
【问题描述】:

在接下来的文章中,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 打算如何使用该功能。

【问题讨论】:

    标签: javascript


    【解决方案1】:
    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

    您可能会在该链接中找到信息丰富的示例。

    【讨论】:

    • 很高兴知道。这或多或少是我期望函数签名的样子。只是想了解 Crock 是如何打算使用该函数的。
    • @Steve,了解他的意图的最佳选择可能是向他发送一封电子邮件,地址是您链接到的页面顶部的地址。我的头像是一只吃着一罐蔬菜的塞满(而且相当肥)的霸王龙。霸王龙的前肢不擅长打开罐子,所以它必须把罐子整个吃掉。
    • 这太荒谬了......每个人都知道霸王龙不吃蔬菜。也许 Crock 应该改用 StackOverflow。
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2012-04-25
    • 2015-07-07
    • 2013-05-20
    • 2010-09-28
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多