Унаследовать без привязки к объектам
/*Базовый*/ 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, время: 21:51. |