Это сложно объяснить, но я занимаюсь этим уже несколько дней. Я "расширяю" один Javascript "класс" на другой, но вызов метода базового класса из метода дочернего класса не работает должным образом. Кажется, что метод базового класса «действует» как статический метод: свойства, которые определены в дочернем классе, так или иначе имеют свои значения по умолчанию при вызове метода базового класса из метода дочернего класса.
Для простоты я не включил свой сложный код, но создал простой пример того, что я делаю:
function extend(Child, Parent){
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.base = Parent.prototype;
}
function BaseClass(){
}
BaseClass.prototype.randomNumber = 0;
BaseClass.prototype.functionA = function(){
this.randomNumber = 200;
this.functionB();
}
BaseClass.prototype.functionB = function(){
alert(this.randomNumber);
console.info(this);
}
function ChildClass(){
this.functionB = function(){
ChildClass.base.functionB();
};
}
extend(ChildClass, BaseClass);
var childInstance = new ChildClass();
childInstance.functionA();
Я использую firebug для входа в консоль. Он выводит "Baseclass", и this.randomNumber как-то равно 0, в то время как он установлен в 200 в функции A.
метод расширения, который я использую, аналогичен методу из Yahoo.lang.extend, который я тоже пробовал с тем же результатом.
Я не могу понять, что я что-то упустил, или это только один из недостатков "расширения" Javascript, и я фактически вызываю здесь "статический" метод. Помощь будет высоко ценится здесь. Надеюсь, понятно, что я пытаюсь сделать здесь, потому что мне сложно выразить это словами. Большое спасибо заранее!