数据属性是否危险?

时间:2014-04-22 13:01:44

标签: javascript inheritance prototypal-inheritance

使用以下简单示例:

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

现在,在考虑原型继承之前,这很好。说我现在想继承这个对象:

 var child_object = Object.create(MyObject);

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

这种理解是否正确?

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

对象应该被视为函数的容器吗?

1 个答案:

答案 0 :(得分:1)

  

没有本地方法来强制使用自己的版本创建子对象,对吗?

如果您希望所有实例都具有这些属性,则默认情况下,您不应继承但构造它们。通常的方法是

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

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

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