我在jQuery中面临的问题是自动更改变量值。 如下面的例子。
graphB = some values;
var graphOption = graphB;
现在如果我正在更改“graphOption”的值,那么它将自动更改“graphB”的值。
我无法弄清问题是什么。
答案 0 :(得分:2)
两个变量都引用同一个对象,因此在一个变量中对其属性所做的任何更改都会反映在另一个变量中;你需要首先制作graphB
的(浅)副本:
var graphOption = $.extend({}, graphB);
这将创建一个包含graphB
属性副本的新对象。请注意,如果复制的属性引用对象,则可能会出现相同的问题。为避免这种情况,您需要一份深层副本:
var graphOption = $.extend(true, {}, graphB);
另请参阅:jQuery.extend()
答案 1 :(得分:1)
问题不在于jQuery。在javascript对象属性中维护引用。换句话说,你没有指定值,你正在制作一个指向原始的指针,如果改变了原始指针,指针仍然指向它。
http://snook.ca/archives/javascript/javascript_pass
Javascript pointer/reference craziness. Can someone explain this?
您需要做的是克隆对象,以便获得副本,而不仅仅是指向原始对象的指针。
你可以通过多种方式解决这个问题,你可以使用jQuery的.extend
,你可以使用下划线或lodash的.clone
,或角度的.copy
,或者你可以自己做! / p>
答案 2 :(得分:1)
它们都是对同一对象的引用。 (您可以将graphB和graphOption这两个词视为对象的地址,而不是实际的对象。它们都指向同一个地方。)要实际复制第一个,您可以使用
var graphOption = $.extend({},graphB);
进行浅层复制(任何内部对象仍将使用相同的引用)。
或
var graphOption = $.extend(true, {},graphB);
进行深层复制。
编辑:.clone适用于选定的dom元素,而不是对象。