Я изучаю доступность переменных из методов, унаследованных от родительского объекта к дочернему объекту.
Наследование выполняется, связывая экземпляр родительского объекта с прототипом конструктора дочернего элемента:
Function.prototype.extend = function(child) {
var prototype = new this;
child.prototype = prototype;
return child;
};
Итак, я определяю родительский класс:
var Parent = function() {
var self = this;
this.init = function() {
self.name = 'Abram';
};
this.getName = function() {
alert('self.name = ' + self.name);
};
this.init();
};
и детский класс:
var Baby = Parent.extend(function(name) {
var self = this;
this.init = function() {
self.name = name;
};
this.init();
});
// instantiate a child object:
var baby = new Baby('Jimmy');
// call the inherited method:
baby.getName(); // undefined!
Метод getName
правильно унаследован, но он не имеет доступа к члену self.name
.
Как получится, если он доступен в области экземпляра дочернего класса?
Проверка тела метода с помощью alert(baby.getName)
Я получаю:
function () {
alert("self.name = " + self.name);
}
это именно то, что я ожидал.
Но почему он не разрешает переменную self
локально?