2010-02-01 69 views
1

我想让我的头绕着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()函数,但这看起来不正确。提前

马蒂亚斯

回答

1

,如前面螺纹暴露

感谢,克罗克福德的目标函数略有破损。让我看看我是否可以找到有问题的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

+0

感谢您的指针。有趣的是,你和其他指针使用针对Crockfords推荐的解决方案。新手难以决定。 – luebken 2010-02-01 14:07:46