Доброго.
Имеем
// общее хранилище данных
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()