Локальные атрибуты / переменные в унаследованных классах - PullRequest
1 голос
/ 03 января 2012

У меня есть набор классов, производных от базового класса, как показано ниже (например):

function Base(){}
Base.prototype.foo = function() { alert("base"); };

function Derived() {}

Derived.prototype = Object.create( Base.prototype );
Derived.prototype.foo = function() { alert("overridden"); };  

var b = new Base();
var d = new Derived();

b.foo();
d.foo();

Я хотел бы добавить переменные в базовый класс (не статические переменные в Java, а переменные с отдельными значениями для экземпляра класса). Тем не менее, я бы хотел, чтобы класс Derived также имел к ним доступ.

Я не специалист по Javascript, я немного поигрался, но не могу заставить его работать. Возможно ли этого добиться? Или я должен реализовать сеттер и геттер?

1 Ответ

2 голосов
/ 03 января 2012

Пример:

function Base( name ){
    this.name = name;
}


function Derived( name, type ) {
    Base.call( this, name );
    this.type = type;
}
Derived.prototype = Object.create( Base.prototype );


var b = new Base( 'Peter' );
var d = new Derived( 'John', 2 );

Итак, класс Base определяет один элемент экземпляра - 'name'.Класс Derived определяет один дополнительный член экземпляра - 'type'.

Ключевая часть вызывает конструктор Base внутри вызова конструктора Derived, поэтому вы внутренне«настроить» экземпляр, как если бы он был Base экземпляром (вы передаете необходимые аргументы), а затем вы дополняете экземпляр дополнительным материалом, определенным только для Derived экземпляров.

Итак,в моем примере выше, b имеет одно собственное свойство - 'name', тогда как d имеет два собственных свойства - 'name' и 'type'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...