私は 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'
変数をvargenetic
のプライベート変数に設定できます。Dog
Cat
function Dog(){
var genetic=g;
}
問題は、genetic
がプライベートにDog
なったため、オブジェクトからアクセスできず、Animal
継承全体が無意味になることです。
それを解決する方法はありますか?
編集:また、 /インスタンスgentic
で変更できないように、プライベートにしたいです。Dog
Cat