Многие неполноценные создания, проектируя объектно ориентированные интерфейсы, вместо того, чтобы использовать правильный паттерн — делгирование
function Super(){}
Super.prototype.a=1
function Class(){}
Class.prototype=Object.create(Super.prototype)
Class.prototype.constructor=Class
Class.prototype.b=2
instanceOfClass=new Class
alert(instanceOfClass.a) // 1
alert(instanceOfClass.b) // 2
Используют быдло-паттерны, основанные на копировании:
Object.defineProperty(Object.prototype, "extend", {
value: function(src){
for(var i in src.prototype) this.prototype[i]=src.prototype[i]
},
enumerable: false
})
function Super(){}
Super.prototype.a=1
function Class(){}
Class.extend(Super) // copy
Class.prototype.b=2
instanceOfClass=new Class
alert(instanceOfClass.a) // 1
alert(instanceOfClass.b) // 2
Super.prototype.a=100
alert(instanceOfClass.a) // 1 still!!!
Как видно, это совсем не одно и то же.
На первый взгляд, второй подход тоже имеет свои преимущества — например, ускоряются лукапы (мы сделаем вид, что память у нас не засирается, ведь ее много:)).
Но этот подход имеет фатальный недостаток. При усложнении логики, добавлении нескольких слоев суперклассов, уже х-поймешь, что от чего наследуется, напрочь нарушается модульность, мы лишаемся плюшек позднего связывания, и, как следствие, снижаем уровень абстракции. Короче, мы получаем либо полный дублирования примитивный код, либо вообще бардак.
Похожие проблмы есть и у подхода, основанного на лксических замыканиях, aka классовый ООП.
Я вот что подумал. Такой говноподход к проектированию был бы невозможен, если бы память была так же дорога, как на заре компьютерной эры. Выходит, удешевление памяти само по себе плодит инженеров-секретуток, и этот процесс сродни расползанию раковой опухоли?
Такой вот парадокс памяти. Этот парадокс сродни деградации в человеческом мышлнии — чем больше мы способны запомнить, тем меньше мы мыслим аналитичски, все сводится к поиску по «кешам»
ЗЫ если будут вопросы, отвечу вечером, дела-с