Постижение прототипного наследования. Подтвердите догадку )
Доброго.
Имеем // общее хранилище данных function Book{ this.data = {} } // странички function Page(book){ this.book = book; } var p1 = new Page(new Book()); var p2 = new Page(p1.book); Объект book используется для обмена данными между объектами. Так бы я сделал на php. И тут меня озарило :) Прототипы!
function Book(){
this.test = 0;
this.type = 'BOOK';
}
Book.prototype.createPage = function(PageType){
PageType.prototype = this; // теперь поле test будет у объектов общее
return new PageType();
}
Book.prototype.func = function(){
return 'This is Book.func()';
}
Book.prototype.inc = function(){
return this.type + ' ' + ++this.test;
}
function PageA(){
this.type = 'A';
}
function PageB(){
this.type = 'B';
this.func = function(){
return 'This is PageB.func(). Test = ' + this.test;
}
}
var a = (new Book()).createPage(PageA);
var b = a.createPage(PageB);
alert(a.inc()); // A 1
alert(b.inc()); // B 2
alert(a.func()); // This is Book.func()
alert(b.func()); // This is PageB.func(). Test = 2
Общее хранилище имеем (поле test), наследование общих методов есть, переопределить методы/поля можем Правильно ли я понял и заюзал фишку прототипного наследования ? Как вызвать родительский метод ? В PageB.func() вызвать родительскую func() |
Гдето есть курсы "как вынести мозг с двух строк" ?:blink:
|
AndryG, очень подробно всё расписано тут:
ООП в javascript: наследование |
Цитата:
Страницу про наследование изучил раньше ещё вдоль и поперек. Именно после её прочтения и решил использовать "прототипные" фишки. Хочу услышать от знатоков, верно ли я исползьую этот механизм. |
Rise, вам если влом начальный топик полностью прочесть, то не надо ёрничать в теме.
Я показал одну архитектуру, затем переложил её на вариант с прототипами и попросил оценить, так ли это делается. Я не просил пустословить и забивать тему мусором. Если не заешь что сказать, то просто промолчи. |
Rise, повторюсь: "Если не понимаешь - не пиши чепухи" :) Неадекватушка.
|
AndryG, не логично и не правильно Вы сделали, пару примеров наследования:
var ParentClass = function() {
};
ParentClass.prototype.bar = function() {
alert('foo bar');
};
var MyClass = function() {
};
MyClass.prototype = Object.create(ParentClass.prototype);
MyClass.prototype.foo = function() {
this.bar();
};
var a = new MyClass();
a.foo();
var ParentClass = function() {
};
ParentClass.prototype.bar = function() {
alert('foo bar');
};
var MyClass = function() {
};
MyClass.prototype = {
foo: function() {
this.bar();
},
__proto__: Object.create(ParentClass.prototype)
};
var a = new MyClass();
a.foo();
|
Фальстарт. Ваши примеры вообще непостижимая грамота.
Будем нарабатывать на прозрение... |
AndryG, может быть вот так будет проще понять:
var Родитель = function(фамилия)
{
this.фамилия = фамилия || 'безымянный';
this.public_method = function()
{
alert('Public method')
}
};
var Ребёнок = function()
{
this.public_method = function()
{
alert('Переопределённый public method')
};
this.скажи_чей_ты = function()
{
alert('Моя фамилия: ' + this.фамилия)
}
};
//Класс "Родитель" является предком для класса "Ребёнок",
//у которого переопределён метод public_method.
Ребёнок.prototype = new Родитель('Батькович');
var test = new Ребёнок();
test.скажи_чей_ты(); // => "Моя фамилия: Батькович"
test.public_method(); // => "Переопределённый public method"
alert(test.фамилия); // => "Батькович"
Что ещё можно почитать про ООП в JS: ООП в JavaScript Основы и заблуждения насчёт JavaScript |
pureJS, плохой подход.
|
| Часовой пояс GMT +3, время: 22:03. |