我正在开发一项需要继承的功能,如下所示:
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
,这样就可以轻松地将任何值推入其中而不会打扰其他子对象。我倾向于采用第二种方法,但我只是想确定是否有更好的方法。
答案 0 :(得分:0)
如果你的属性会改变每个实例,那么他们最好不要生活在实例上,而不是原型。如果您有需要由某个类的所有实例共享的数据,您有两个选择。
1)像你一直那样在原型上拍打属性。这对函数非常有效,但我几乎从不在原型上放置数据/非函数引用。这部分是为了风格,部分是为了保持一致。
2)将属性“静态”附加到构造函数,并像Circle.PI
而不是cirlceInstance.PI
在你的情况下,这个数组似乎应该是一个实例属性。
var Thing1 = function() { this.property = []; }