Унаследовать без привязки к объектам
/*Базовый*/
function X(x) {
this.x = x;
}
X.prototype.getX = function(){return this.x;}
var x = new X(5);
/*Y*/
function Y(y) {
this.y = y;
}
Y.prototype = x; /*Наследем свойства/методы объекта x*/
Y.prototype.getY = function(){return this.y;}
var y = new Y(7);
/*Add*/
function Add() {
this.add = this.getX() + this.getY();
}
Add.prototype = y; /*Наследем y, + свойства/методы объекта x*/
Add.prototype.getAdd = function(){return this.add;}
var addTwoNum = new Add();
console.log(addTwoNum.add);
Немножко туповато вышло, но я получил унаследованные свойства/методы из выше по иерархии "классов". Можно как то переделать код чтобы не так наследовать Y.prototype = x; и Add.prototype = y;, то есть по сути мне нужно сначала создать объекты x,y их инициализировать и наследовать. А как то так Y.prototype = X.prototype; Add.prototype = Y.prototype; И потом когда все будет в объекте типа Add(), туда передавать два значения x и y (new Add(5,7)), а там уже должны быть свойства this.x = x; this.y = y; X.prototype.getX = function(){return this.x;} Y.prototype.getY = function(){return this.y;} Выходит все тоже самое просто убить создание промежуточных объектов var x = new X(5); var y = new Y(7); |
Еще так работает
/*Базовый*/
function X(x) {
this.x = x;
}
X.prototype.getX = function(){return this.x;}
/*Y*/
function Y(y) {
this.y = y;
}
Y.prototype = new X(); /*Наследем свойства/методы объекта x*/
Y.prototype.getY = function(){return this.y;}
var y = new X();
/*Add*/
function Add(x,y) {
this.x = x;
this.y = y;
this.add = this.getX() + this.getY();
}
Add.prototype = new Y(); /*Наследем y, + свойства/методы объекта x*/
Add.prototype.getAdd = function(){return this.add;}
var addTwoNum = new Add(5,7);
console.log(addTwoNum.add);
не нужно создавать объектов |
Цитата:
|
Спасибо, очень познавательно
Можете подсказать такой вопрос. Почему вызов функции 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);
все хорошо, наследуется, ошибок нет А вот так вызовет уже ошибку Цитата:
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);
|
Цитата:
|
Подскажите я правильно понял.
Выходит я сначала добавил метод
Y.prototype.getY = function(){return this.y;}
через prototype, а потом extend(Y, X); и extend перезаписал его, а точнее весь prototype родительским свойствами/методами? |
Вот тут еще вычитал
http://javascript.ru/tutorial/object...-nasledovaniya Цитата:
|
| Часовой пояс GMT +3, время: 20:29. |