Показать сообщение отдельно
  #41 (permalink)  
Старый 16.12.2012, 11:01
Профессор
Посмотреть профиль Найти все сообщения от godofjavascript
 
Регистрация: 11.12.2012
Сообщений: 265

Да) это я придумал когда доказывал одному парню что прототипы могут все что могут классы, тогда он давал мне задания которые я не мог сделать обычным способом но я выкручивался, в итоге он мне сказал что это больше походит на костыль, а я ему ответил что если тебе не удобно так пистаь то это можно в простую обертку обернуть)

Собственно вот как это выглядело без обертки:

// конструктор животного (создает животных)
function Animal () {
   return this.init.apply(this, arguments)
}
// конструктор прототипа животного (создает эталонное животное)
function AnimalPrototype () {
    this.init = function(){};
    this.run = function(){ alert('run') }
}
// создаем эталонное животное как прототип животных 
// конструктор Animal будет инициализировать метод инициализации (init) эталонного животного
Animal.prototype = new AnimalPrototype;



// конструктор котов(создает котов)
function Cat () {
   return this.init.apply(this, arguments)
}
// конструктор прототипа кота(создает эталонного кота)
function CatPrototype(){
    this.run = function(){ CatPrototype.prototype.run.apply(this, arguments);  alert('run') }
}

// указываем что эталонное животное будет эталоном для эталонных котов
CatPrototype.prototype = Animal.prototype;

// создаем эталонного кота как прототип котов 
// конструктор будет инициализировать метод инициализации (init) эталонного кота
Cat.prototype = new CatPrototype;


эталон, прототип, образец - синонимы.

(это и называется наследование на прототипах, когда один обьект служит образцом для других и они стараются на него ровняться если отличия не созданы намеренно, это техника повторного использования кода, когда у дочерних обьектов нам нужно описывать только отличие от эталонного, и, как бонус, оно экономит память )

вот, а в Class это все делается автоматически)

Последний раз редактировалось godofjavascript, 16.12.2012 в 11:29.
Ответить с цитированием