我正在使用 JavaScript 中的 OOP 做一些经验。我的目标是拥有一个父对象,该对象包含其他几个对象共有的方法,这些对象继承自该父对象。问题是,我希望父对象的方法能够读取子对象的字段。
我使用以下函数进行继承:
Function.prototype.inherits=function(obj){this.prototype=new obj();}
这些是一些示例对象:
function Genetic(c){
this.code=c;
}
//My 'parent object':
function Animal(){
this.getCode=function(){
return(genetic.code);
}
}
g=new Genetic('test');
function Dog(){
genetic=g;
}
Dog.inherits(Animal);
g=new Genetic('foo');
function Cat(){
genetic=g;
}
Cat.inherits(Animal);
d=new Dog();
c=new Cat();
现在,我期待d.getCode()
回归'test'
,并且c.getCode()
回归'foo'
。问题是,两者都返回'foo'
。变量genetic
在Animal
范围内,而不在Dog
/Cat
范围内。这意味着每当我创建一个继承自的新对象时Animal
,该genetic
变量都会被覆盖。证明:
function Bla(){}
Bla.inherits(Animal);
bla=new Bla()
bla.getCode() //Returns 'foo'
我可以将genetic
变量设置为varDog
的私有变量:Cat
function Dog(){
var genetic=g;
}
问题是,由于genetic
它现在是私有的Dog
,因此对象无法访问它Animal
,从而使整个继承变得毫无意义。
你有什么办法解决这个问题吗?
编辑:另外,我想gentic
保密,这样就不能在Dog
/Cat
实例中修改它。