Google Closure Library继承了属性

时间:2013-05-16 22:51:10

标签: javascript inheritance google-closure

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

我有一个问题。当我扩展基类时,如果我没有在其构造函数中设置基类的属性,则所有子项最终都会共享属性,例如,如果我将项添加到数组,则数组会不断变大。

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您是使用Parent.call(this)还是Parent.apply

复制子项中的父定义变量
function Child(){
  Parent.apply(this,arguments);
}
goog.inherits(Child, Parent);

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

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

基本原型行为:

Prototypical inheritance - writing up 处理构造函数参数的好参考但是要应用你必须实现_init并更改goog.base: How to "properly" create a custom object in JavaScript?