javascript - 数据属性危险吗?

标签 javascript inheritance prototypal-inheritance

使用以下简单示例:

var MyObject = {
    name: '',
    object_id: '',
    awesomeFunction: function() { console.log('awesome'); }
};

现在,这很好,直到我想到原型(prototype)继承。假设我现在想继承这个对象:

 var child_object = Object.create(MyObject);

这会立即导致问题,因为子对象没有指定 nameobject_id 属性,因此这些属性将从父对象(原型(prototype))中获取。并且没有本地方法来强制使用它们自己的版本创建子对象,对吧?

这种理解是否正确?

如果是这样,我是否错误地考虑了 javascript 中的继承?

是否应该将对象视为函数的容器?

最佳答案

And there is no native way to enforce that child objects are created with their own versions of these, right?

如果您希望所有实例都默认具有这些属性,那么您不应该继承而是构造它们。这样做的正常方法是

function Parent(name, id) {
    this.name = name;
    this.id   = id;
}

function Child(name, id) {
     Parent.call(this, name, id);
}

现在,当您创建 Child 实例时,它们将拥有自己版本的 nameid。此外,您可以在自己创建它们的同时为其赋值。

关于javascript - 数据属性危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220426/

相关文章:

javascript - 在表单的文本字段中设置默认文本

c++ - 如何复制 shared_ptr 的 vector ?

javascript - Node.js 奇怪的原型(prototype)继承

javascript - 原型(prototype)属性的构造函数实例的奇怪行为

javascript - 在asp.net Listview中添加自动计算求和行和列

javascript - CK 编辑器。如何关闭自动增长(设置恒定高度)

java - 未定义的构造函数(java)

Java:如何使用父类(super class)设计集合

javascript - AngularJS 中范围原型(prototype)/原型(prototype)继承的细微差别是什么?

javascript - 用于存储键值对并且可以使用 Jquery 轻松解析的 JSON 的替代方案是什么?