У меня есть опыт работы с ООП в JavaScript. Моя цель - иметь родительский объект, который содержит методы, общие для нескольких других объектов, которые наследуются от этого родительского объекта. Дело в том, что я хочу, чтобы методы родительских объектов могли читать дочерние поля.
Я использую следующую функцию для наследования:
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
не может получить к нему доступ, что делает все наследство бессмысленным.
Видите ли вы какой-нибудь способ решить это?
EDIT: Кроме того, я хочу, чтобы gentic
был приватным, чтобы его нельзя было изменить в Dog
/ Cat
экземплярах.