Показать сообщение отдельно
  #4 (permalink)  
Старый 03.07.2011, 16:49
Кандидат Javascript-наук
Отправить личное сообщение для TicTac Посмотреть профиль Найти все сообщения от TicTac
 
Регистрация: 07.09.2010
Сообщений: 133

Спасибо, очень познавательно

Можете подсказать такой вопрос. Почему вызов функции extend после добавления методов/свойств, полного описания класса вызывает ошибку

Например(рабочий пример)
function extend(Child, Parent) {
     var F = function() { }
     F.prototype = Parent.prototype
     Child.prototype = new F()
     Child.prototype.constructor = Child
     Child.superclass = Parent.prototype
 }

/*Базовый*/
function X(x) {this.x = x;}
X.prototype.getX = function(){return this.x;}

/*Y*/
function Y(y) {this.y = y;}
extend(Y, X);
Y.prototype.getY = function(){return this.y;}

/*Add*/
function Add(x,y) {
    this.x = x ;
    this.y = y;
    this.add = this.getX() + this.getY();
}
extend(Add, Y);
Add.prototype.getAdd = function(){return this.add;}

var addTwoNum = new Add(5,7);
console.log(addTwoNum.add);


все хорошо, наследуется, ошибок нет

А вот так вызовет уже ошибку
Цитата:
Uncaught TypeError: Object #<Add> has no method 'getY'
function extend(Child, Parent) {
     var F = function() { }
     F.prototype = Parent.prototype
     Child.prototype = new F()
     Child.prototype.constructor = Child
     Child.superclass = Parent.prototype
 }

/*Базовый*/
function X(x) {this.x = x;}
X.prototype.getX = function(){return this.x;}

/*Y*/
function Y(y) {this.y = y;}
Y.prototype.getY = function(){return this.y;}

/*Add*/
function Add(x,y) {
    this.x = x ;
    this.y = y;
    this.add = this.getX() + this.getY();
}
Add.prototype.getAdd = function(){return this.add;}

extend(Y, X);
extend(Add, Y);

var addTwoNum = new Add(5,7);
console.log(addTwoNum.add);

Последний раз редактировалось TicTac, 03.07.2011 в 16:55.
Ответить с цитированием