Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2016, 14:28
Новичок на форуме
Отправить личное сообщение для AndryG Посмотреть профиль Найти все сообщения от AndryG
 
Регистрация: 14.06.2016
Сообщений: 6

Постижение прототипного наследования. Подтвердите догадку )
Доброго.

Имеем

// общее хранилище данных
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()
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2016, 14:54
Кандидат Javascript-наук
Отправить личное сообщение для aklis Посмотреть профиль Найти все сообщения от aklis
 
Регистрация: 27.04.2015
Сообщений: 99

Гдето есть курсы "как вынести мозг с двух строк" ?
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2016, 15:09
Аватар для pureJS
Аспирант
Отправить личное сообщение для pureJS Посмотреть профиль Найти все сообщения от pureJS
 
Регистрация: 04.06.2016
Сообщений: 70

AndryG, очень подробно всё расписано тут:
ООП в javascript: наследование
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2016, 15:30
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от AndryG Посмотреть сообщение
Так бы я сделал на php.
А что василий в php наследования нет?
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2016, 15:39
Новичок на форуме
Отправить личное сообщение для AndryG Посмотреть профиль Найти все сообщения от AndryG
 
Регистрация: 14.06.2016
Сообщений: 6

Цитата:
А что василий в php наследования нет?
Вопрос не в наследовании, а в классе для общих данных.

Страницу про наследование изучил раньше ещё вдоль и поперек.
Именно после её прочтения и решил использовать "прототипные" фишки.

Хочу услышать от знатоков, верно ли я исползьую этот механизм.
Ответить с цитированием
  #6 (permalink)  
Старый 14.06.2016, 15:55
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от AndryG Посмотреть сообщение
Вопрос не в наследовании
А что про него пишешь или так для красного словца что-ли?
Ответить с цитированием
  #7 (permalink)  
Старый 14.06.2016, 16:24
Новичок на форуме
Отправить личное сообщение для AndryG Посмотреть профиль Найти все сообщения от AndryG
 
Регистрация: 14.06.2016
Сообщений: 6

Rise, вам если влом начальный топик полностью прочесть, то не надо ёрничать в теме.

Я показал одну архитектуру, затем переложил её на вариант с прототипами и попросил оценить, так ли это делается.

Я не просил пустословить и забивать тему мусором. Если не заешь что сказать, то просто промолчи.
Ответить с цитированием
  #8 (permalink)  
Старый 14.06.2016, 16:48
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от AndryG Посмотреть сообщение
Я показал одну архитектуру
Не постиг я твою "архитектуру", логики в коде 0 начиная от названия переменных заканчивая комментариями, не думаю что в этом говне кто-то разберется, вот тебе моя оценка.

Последний раз редактировалось Rise, 14.06.2016 в 16:52.
Ответить с цитированием
  #9 (permalink)  
Старый 14.06.2016, 18:26
Новичок на форуме
Отправить личное сообщение для AndryG Посмотреть профиль Найти все сообщения от AndryG
 
Регистрация: 14.06.2016
Сообщений: 6

Rise, повторюсь: "Если не понимаешь - не пиши чепухи" Неадекватушка.
Ответить с цитированием
  #10 (permalink)  
Старый 14.06.2016, 19:34
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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();

Последний раз редактировалось ruslan_mart, 14.06.2016 в 19:39.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск