覆盖原型继承中的数组
Override an array in prototypal inheritance
我正在研究一个需要继承的功能,如下所示:
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)像你一直在做的那样在原型上拍打属性。这对于函数非常有效,但我几乎从不将数据/非函数引用放在原型上。这部分是为了风格,部分是为了一致性。
2)将属性"静态"附加到构造函数,并像Circle.PI
而不是cirlceInstance.PI
一样访问它
在您的情况下,此数组似乎应该是一个实例属性。
var Thing1 = function() { this.property = []; }
相关文章:
- 如何在映射数组中添加换行符
- 为什么不't htmlCollection从数组继承
- JavaScript-使用B.prototype=new A()继承数组
- 向扩展数组的JS集合添加对象(继承?)
- 具有函数继承的对象扩展数组
- JavaScript:将继承的类添加到数组中不起作用
- 覆盖原型继承中的数组
- CoffeeScript类-循环遍历继承对象的数组
- 从数组中的对象继承/调用函数
- 如何强制javascript数组从我的自定义对象继承
- Javascript继承:父's数组变量保留值
- 为什么这种javascript继承会导致引用共享数组
- 从Node.js中的EventEmitter继承的原型数组
- 使用Javascript prototype继承在数组中存储数据
- 当实例存储在数组中时,原型继承不起作用
- 关于在javascript中继承数组对象的属性
- Javascript:使对象继承数组方法
- 如何使用继承的方法更改继承的数组
- 在Javascript原型继承中,数组和数字数据类型之间有区别吗
- 继承的子对象在JavaScript中共享相同的数组属性