Постижение прототипного наследования. Подтвердите догадку )
Доброго.
Имеем // общее хранилище данных 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, время: 23:25. |