继承的子对象在JavaScript中共享相同的数组属性
Inherited child objects share the same array property in JavaScript?
> function Parent() {this.arr = [];}
undefined
> function Child() {}
undefined
> Child.prototype = new Parent();
{ arr: [] }
> child1 = new Child();
{}
> child2 = new Child();
{}
> child1.arr.push('From child1');
1
> child2.arr
[ 'From child1' ]
>
鉴于上述,我希望child2.arr
是空的,因为它是自己的对象。我怎么能让孩子1和孩子2包含他们自己的arr?谢谢!
您必须在构造函数中进行赋值:
function Child() {
this.arr = this.arr ? this.arr.slice(0) : [];
}
给每个子节点一个原型的.arr
数组的副本,如果它存在的话。(这只是一个肤浅的复制,这只是一个可能的例子。)对象属性的赋值总是涉及目标对象的局部("自己的")属性,但是引用涉及原型链。
也不是说,由于相当神秘的原因,这样初始化原型不是一个好主意。最好使用Object.create
:
Child.prototype = Object.create(Parent.prototype);
这将给您一个使用Parent
原型对象作为其原型的新对象。
这里有一个关于这个话题的老问题,但仍然很有趣。
探讨javascript中的继承
基本上,如果属性不在对象上,你正在查看javascript查看它的原型,并试图找到它,直到它到达Object
。
你的Child
没有属性arr
,但它的原型new Parent()
有,那一个是从Child1
和Child2
引用的
function Parent() { this.arr = []; }
function Child() { this.parent = new Parent(); }
Child.prototype = new Parent();
var child1 = new Child();
var child2 = new Child();
child1.parent.arr.push('From child1');
alert(child2.parent.arr);
相关文章:
- 如何创建共享某些属性的对象
- React组件之间共享属性
- 与所有派生子项共享父属性值
- 为什么 PrototypeJS 类实例共享相同的属性
- 如果对象使用 reduce、forEach 或筛选器共享属性值,则合并 JSON 数组中的对象
- Javascript 类属性表现为共享变量
- 在 Javascript 中的对象组之间共享属性
- 共享javascript属性
- 如何将父指令的属性与子指令共享
- 为什么基类的对象属性与子类的所有实例共享?
- 在共享扩展访问网页属性
- 跨实例共享的Javascript对象属性
- 在AngularJS中,如何为多个控制器的共享服务属性的异步模型更改更新绑定[.]
- 如何使用javascript原型在实例之间共享属性
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- Facebook javascript SDK共享版本从属性文件到jsp不工作[webapp]
- 骨干视图继承共享属性
- 如何在angularjs中的两个控制器之间共享$scope属性,而不是其值
- JavaScript 原型共享属性
- 如何共享作为对象属性的函数并避免重复代码