我正在做一些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
變量設置爲是的Dog
和私有變量Cat
使用var:
function Dog(){
var genetic=g;
}
問題是,因爲genetic
現在是私有的Dog
,它不能是由Animal
對象訪問,使整個繼承毫無意義。
您是否看到任何解決方法?
編輯:另外,我想gentic
是私人的,所以它不能被修改在Dog
/Cat
實例。
你是對的,但我希望變量是私人的,所以創建後不能修改!用你寫的代碼,我可以這樣做:d.genetic.code ='whadup bro'; – Alex
@Alex:請參閱我的更新。 –
好的,謝謝,所以我試圖做的事情是不可能的......你能解釋一下你給我的'inherit'函數的區別嗎? – Alex