【发布时间】:2011-04-25 02:46:19
【问题描述】:
我环顾四周,找不到任何可以帮助我的东西。为什么我不能克隆一个带有私有成员的 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++ 那样真正具有 OO,但是嘿,我们正在谈论编程语言,总有一种出路。有时它很丑,但有一个。
我明白了。
解决方案 A:只需将其设为 this.changed 而不是 var changed
解决方案 B:制作我自己的克隆函数,重新重建整个对象
我只是希望有一些解决方案 C 可以将 javascript 欺骗成标准的面向对象模式。
某人,我真的坚持 A 还是 B?
【问题讨论】:
标签: javascript object clone private