javascript - Crockford 原型(prototype)继承

标签 javascript

在接下来的文章中,Douglas Crockford 创建了一个函数来更接近地模拟 JavaScript 中的原型(prototype)继承 (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;
...

有没有其他人觉得这是一种向对象添加属性和方法的丑陋方式?

我知道我可以在技术上传递一个函数,我想为它设置所有方法和变量的原型(prototype)。

我或多或少试图理解 Crockford 打算如何使用该功能。

最佳答案

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

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

关于javascript - Crockford 原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323099/

相关文章:

javascript - 如何在 AngularJS 中同步 select 和 GET-param?

javascript - 使用 JQuery 调整浏览器的宽度

javascript - 如何将包含数组的对象转换为对象的对象

javascript - Laravel + AngularJS CORS 不工作

JavaScript 将数据动态填充到 HTML 表格中

javascript - 将正则表达式放入字符串中

javascript - 谷歌 JavaScript 验证码处理

javascript - 使用 vanilla js 按需加载脚本文件

javascript - 在页面加载时保持单个单选按钮未选中

javascript - 使用输入 javascript 动态添加和删除列表组