Я огляделся вокруг и не нашел ничего, что могло бы мне помочь.С какой стати я не могу клонировать объект javascript с закрытыми членами, не превращая их в квантово запутанные?
Просто посмотрите на этот код ... Это обычная частная собственность с getter и setter.Так или иначе, если я вызываю открытый сеттер в одном случае, клонированный тоже меняется.Зачем?Можно ли обойти это?
obj = function(){
var changed = 0;
this.getChanged = function(){
return changed;
}
this.setChanged = function(){
changed = 1;
}
this.setUnchanged = function(){
changed = 0;
}
};
myObj = new obj();
copiedObj = $.extend(true, {}, myObj); // Or any other deep copy function you'd have around
myObj.setChanged();
myObj.getChanged(); // returns 1
copiedObj.getChanged(); // returns 1!
copiedObj.setUnchanged();
copiedObj.getChanged(); // returns 0
myObj.getChanged(); // returns 0
Спасибо за любые идеи.
Редактировать : Пока ничего нового.Я знаю, что в javascript нет ОО, таких как Java или C ++, но, эй, мы говорим о языках программирования, всегда есть один выход.Иногда это уродливо, но есть один.
Я понял.Решение A: просто сделайте это this.changed вместо var changes
Решение B: создайте мою собственную функцию-клон, которая заново восстанавливает весь объект
Я былпросто надеясь, что будет какое-то решение C, которое обманет javascript в стандартных объектно-ориентированных шаблонах.
Кто-то, я действительно застрял с A или B?