0

我正在试验 Google 闭包库,尤其是它的“继承”方法。

我有一个问题。当我扩展一个基类时,如果我没有在它的构造函数中设置基类的属性,那么所有的子类最终都会共享这些属性,例如,如果我将项目添加到数组中,那么数组只会变得越来越大。

有人可以解释为什么我需要在构造函数中设置属性吗?

这是我的例子,如果你注释掉“this.list = [9,8,7];” 在“Person”构造函数中,孩子们共享人员列表并不断添加。

http://jsbin.com/imujoy/1/edit

谢谢你的帮助。

4

2 回答 2

0

当您从子级引用“this.list”时,它首先查看对象本身以查找该属性。当它找不到它时,它会查看它的原型并找到“列表”数组。但是,该列表是对您在 Person 原型上创建的相同列表的引用。如果您在构造函数中分配一个新的“this.list”,那么您只是在对象上分配了一个属性,而不是原型。一般来说,如果您打算使用继承模型,则不应在原型上分配非原始类型(数组、对象),因为子代将共享相同的引用。

于 2013-05-19T22:29:25.613 回答
0

您是否使用 Parent.call(this) 或 Parent.apply 在子级中复制父级定义的变量

function Child(){
  Parent.apply(this,arguments);
}
goog.inherits(Child, Parent);

当在 Parent 中以下列方式定义时,list 将成为任何 Child 实例的属性:

function Parent(){
  this.list=[];
}

基本原型行为:

原型继承 - 编写 处理构造函数参数的良好参考,但要应用,您必须实现 _init 并更改 goog.base: 如何“正确”在 JavaScript 中创建自定义对象?

于 2013-05-26T10:42:01.917 回答