如何使用protoypal继承在JavaScript中初始化成员变量
问题描述:
我想让我的头绕着protoypal继承,并且有一个关于共享成员变量的问题。如何使用protoypal继承在JavaScript中初始化成员变量
我有一个对象:
var objA = {
list: [],
myPush: function(aParam){
this.list.push(aParam);
}
}
,并尝试 “protoypal继承” 它与对象()函数http://javascript.crockford.com/prototypal.html
var objB = object(objA);
,但不知何故更改objA被转移到objB:
objA.myPush('a string');
equals(objA.list.length, 1);
equals(objB.list.length, 0); //<= Fails. Why?
未通过测试的完整代码:http://jsbin.com/izawi/edit
有人可以向我解释这一点吗?并可能修复。我可以有一个constuct()函数,但这看起来不正确。提前
马蒂亚斯
答
,如前面螺纹暴露
感谢,克罗克福德的目标函数略有破损。让我看看我是否可以找到有问题的SO线程。
“传统”的构造函数的传承工程:
var a = {
list: [],
myPush: function(aParam){
this.list.push(aParam);
}
}
function B() {}
B.prototype = a;
var b = new B();
a.myPush('a string');
b.list.length == a.list.length; // true
这是不是“适当”的原型继承略少纯 - 从构造对象而不是对象继承对象继承。是的,它也不适合我。不,我不能解释为什么Crockford的对象函数在这方面失败。这只是世界的方式,我猜。
更新:这里的相关讨论我在想:Implementing instance methods/variables in prototypal inheritance
感谢您的指针。有趣的是,你和其他指针使用针对Crockfords推荐的解决方案。新手难以决定。 – luebken 2010-02-01 14:07:46