Да) это я придумал когда доказывал одному парню что прототипы могут все что могут классы, тогда он давал мне задания которые я не мог сделать обычным способом но я выкручивался, в итоге он мне сказал что это больше походит на костыль, а я ему ответил что если тебе не удобно так пистаь то это можно в простую обертку обернуть)
Собственно вот как это выглядело без обертки:
// конструктор животного (создает животных)
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 это все делается автоматически)