覆盖原型继承中的数组

时间:2016-01-20 21:40:26

标签: javascript arrays node.js inheritance prototype

我正在开发一项需要继承的功能,如下所示:

function parent() {}
parent.prototype.someProperty = ['common'];

var child1 = new parent();

我想覆盖一些属性。如果这是一种原始数据类型,那很容易,但someProperty是一个数组。 这里child1在someProperty中有一些其他值,例如['common', 'common2', 'common3']

现在这是一个数组,所以如果我推送像child1.someProperty.push('common2');这样的元素,它们最终会被引用到parent

实现这一目标的最佳方法是什么?

我想到的事情

  • 从原型中复制数组,然后将其附加到child1。问题在于我必须遍历整个数组然后复制它。我想知道是否有更优雅的解决方案。
  • function parent() { someProperty = ['common'];}之类的内容。这将为所有孩子提供someProperty,这样就可以轻松地将任何值推入其中而不会打扰其他子对象。

我倾向于采用第二种方法,但我只是想确定是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

如果你的属性会改变每个实例,那么他们最好不要生活在实例上,而不是原型。如果您有需要由某个类的所有实例共享的数据,您有两个选择。

1)像你一直那样在原型上拍打属性。这对函数非常有效,但我几乎从不在原型上放置数据/非函数引用。这部分是为了风格,部分是为了保持一致。

2)将属性“静态”附加到构造函数,并像Circle.PI而不是cirlceInstance.PI

一样访问它

在你的情况下,这个数组似乎应该是一个实例属性。

var Thing1 = function() { this.property = []; }