Pull to refresh
58
0
Александр Швец @Quadratoff

Interface Developer and JavaScript Enthusiast

Send message
Про обратную сторону я не говорил ;)
Для решения этой проблемы в cloneJS клонируемые объекты-классы (behaviors), должны быть immutable.
Т.е. если в child что-то менять, то parent не должен «затрагиваться».
Правильнее перевести:
Если в child добавить или заменить какое-либо его свойство, то parent не будет затрагиваться.
Вот как всё таки, используя их, мне сделать мне этот would not affect ?

не вырывайте фразу из контекста:
if you will add/REplace any of its properties, it would not affect the cloned object (prototype).

Это не замена свойства:
 cln.s.ss = 5;

Я писал про
… lazy shallow copy
для совместимости с IE
Да ничего… Просто хотел сказать, что если вам нужно создать экземпляр и инициализировать объект с большим количеством свойств, то значительно быстрее и удобнее это можно сделать с помощью __proto__, а не оператора new и конструктора.
Мне кажется, уже можно использовать, т.к. из ECMAScript 6 его врядли выпилят, и если даже такое недоразумение случится, то функцию clone всегда можно переписать с использованием Object.create или функций-конструкторов.
с чего вы взяли что он deprecated? Даже в IE 11 обещают его поддержку.
«Никогда не говори никогда» © :)
Вот тестик наваял по генерации экземпляров jsperf.com/clonejs-vs-new
Сколько в среднем вы создаете экземпляров от одного класса? 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
Поправочка: не можно, а возможно :)
можно, в не strict коде, используя deprecated caller
Плохо в js с инкапсуляцией :(
Если делать это через замыкания в конструкторе, то методы, обращающиеся к свойству, прийдется тоже создавать в конструкторе, и положить их в прототип уже не получится.

А насчет перелопатить, этого прийдется делать не больше чем изменять аргументы конструктору (во всех вызовах). Тут большой разницы я не вижу.
Геттер так не удаляется
а зачем ему удалятся из прототипа? Инстансы работают как надо, чем вам не нравится 1 и 2 и 3 и 3?
Да, так красивее. Почему нельзя в прототипах?
спасибо, хороший пример.
К чему вообще весь этот мир? Кругом тлен и безысходность. Да? :)
ECMA Script 6 называет эти объекты классами, почему мне нельзя?
Как мои знания или незнания тонкостей реализации транслятора JS влияют на суть статьи? В ней же обсуждаются идеологии и идиомы, как вы успели заметить.

P.S.
В JS я пришел из бейсика.
Спасибо, исправил.
легко-нелегко, а делить его или не делить решается программистом. А с ленивой инициализацией делить придется обязательно всегда.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity