Да ничего… Просто хотел сказать, что если вам нужно создать экземпляр и инициализировать объект с большим количеством свойств, то значительно быстрее и удобнее это можно сделать с помощью __proto__, а не оператора new и конструктора.
Мне кажется, уже можно использовать, т.к. из ECMAScript 6 его врядли выпилят, и если даже такое недоразумение случится, то функцию clone всегда можно переписать с использованием Object.create или функций-конструкторов.
Сколько в среднем вы создаете экземпляров от одного класса? 1-2? иногда сотни-тысячи, но значительно реже.
new быстрее clone в 2-5 раз, но при этом clone быстрее класса-конструктора в 20-30 раз.
Если вам нужны сотни экземпляров, можете добавить конструктор в прототип, и использовать new для инстанцирования:
var myClass = {
constructor: function(){},
method: function(){}
};
myClass.constructor.prototype = myClass;
var instance = new myClass.constructor;
Я нашел решение — __proto__. Он оказался даже быстрее конструкторов с оператором new.
Создал фреймворк из 3х строчек кода :) github.com/quadroid/clonejs-nano
Плохо в js с инкапсуляцией :(
Если делать это через замыкания в конструкторе, то методы, обращающиеся к свойству, прийдется тоже создавать в конструкторе, и положить их в прототип уже не получится.
А насчет перелопатить, этого прийдется делать не больше чем изменять аргументы конструктору (во всех вызовах). Тут большой разницы я не вижу.
К чему вообще весь этот мир? Кругом тлен и безысходность. Да? :)
ECMA Script 6 называет эти объекты классами, почему мне нельзя?
Как мои знания или незнания тонкостей реализации транслятора JS влияют на суть статьи? В ней же обсуждаются идеологии и идиомы, как вы успели заметить.
Для решения этой проблемы в cloneJS клонируемые объекты-классы (behaviors), должны быть immutable.
Если в child добавить или заменить какое-либо его свойство, то parent не будет затрагиваться.
не вырывайте фразу из контекста:
Это не замена свойства:
Я писал про
Вот тестик наваял по генерации экземпляров jsperf.com/clonejs-vs-new
new быстрее clone в 2-5 раз, но при этом clone быстрее класса-конструктора в 20-30 раз.
Если вам нужны сотни экземпляров, можете добавить конструктор в прототип, и использовать new для инстанцирования:
Создал фреймворк из 3х строчек кода :)
github.com/quadroid/clonejs-nano
Если делать это через замыкания в конструкторе, то методы, обращающиеся к свойству, прийдется тоже создавать в конструкторе, и положить их в прототип уже не получится.
А насчет перелопатить, этого прийдется делать не больше чем изменять аргументы конструктору (во всех вызовах). Тут большой разницы я не вижу.
ECMA Script 6 называет эти объекты классами, почему мне нельзя?
Как мои знания или незнания тонкостей реализации транслятора JS влияют на суть статьи? В ней же обсуждаются идеологии и идиомы, как вы успели заметить.
P.S.
В JS я пришел из бейсика.