我正试图了解原型继承并对共享成员变量提出疑问。
我有一个对象:
var objA = {
list: [],
myPush: function(aParam){
this.list.push(aParam);
}
}
并尝试使用http://javascript.crockford.com/prototypal.html
中的object()函数“原型继承”它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()函数,但这似乎不对。
提前致谢
的Matthias
答案 0 :(得分:1)
在早期的帖子中暴露出来,Crockford的对象功能略有破坏。让我看看我是否能找到有问题的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