Javascript -克隆的全局变量被覆盖
Javascript - Cloned global variable getting overwritten
我在网页上有一组图表。我想保留一份他们的数据副本& &;DIV ID,然后再修改它们,以便我可以随时重用静态全局副本。(这将是图表的原始数据数组)。同样的数据还有一个全局可变的副本,叫做"globalMasterList"。
这是我到目前为止所尝试的。我遇到的问题是,尽管使用"克隆"方法来备份静态副本,但似乎有一些可更改的全局副本的参考。当我更改全局可变副本时,静态全局副本也会更改。我花了几天时间研究这个问题,但还是没有弄清楚。我也试过一些不同的东西,但都没有运气。
如果有人能帮我解决这个问题,我将不胜感激。
我在网页上有一组图表。我想保留一份他们的数据副本& &;DIV ID,然后再修改它们,以便我可以随时重用静态全局副本。(这将是图表的原始数据数组)。同样的数据还有一个全局可变的副本,叫做"globalMasterList"。
这是我到目前为止所尝试的。我遇到的问题是,尽管使用"克隆"方法来备份静态副本,但似乎有一些可更改的全局副本的参考。当我更改全局可变副本时,静态全局副本也会更改。我花了几天时间研究这个问题,但还是没有弄清楚。我也试过一些不同的东西,但都没有运气。
如果有人能帮我解决这个问题,我将不胜感激。
function modifyGroupingDefault() {
var numDivs = 5;
var divDrawId = 'div5';
if (staticCopyoFGlobalCopy.length !== numDivs) {
staticCopyoFGlobalCopy.length = 0; // Clear the array just in case some junk elements have sneked in
for (var x in masterList) { // Iterate through the charts on the web page
var tempObj = {}; // Temporary object
tempObj.plotId = clone(globalMasterList[x].div.id); // Clone Div ID
tempObj.divData = clone(globalMasterList[x].data); // Clone the dataset
staticCopyoFGlobalCopy.push(tempObj); // Push the cloned object into array
}
}
for (var x in globalMasterList) {
if (globalMasterList[x].div.id === divDrawId) { // Check if the current Div ID in the iteration loop is the Div ID of the chart whose groupingbutton is clicked
delete globalMasterList[x].dataset; // Remove the chart's data provider
for (y in staticCopyoFGlobalCopy) { // Iterate through the static/non-changable global copy
if (staticCopyoFGlobalCopy[y].plotId === divDrawId) {
globalMasterList[x].data = staticCopyoFGlobalCopy[y].divData; // Set the current chart's data to the dataset from the immutable chart array
// Some operation on globalMasterList
//Some operation onglobalMasterList
// Some operation onglobalMasterList
break; // Goal achieved. break out
}
}
break; // Goal achieved. Break out
}
}
}
/*
*
* Clone function
*
*/
function clone(obj) {
var copy;
// Handle the 3 simple types, and null or undefined
if (null === obj || "object" !== typeof obj)
return obj;
// Handle Date
if (obj instanceof Date) {
copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
// Handle Array
if (obj instanceof Array) {
copy = [];
for (var i = 0, len = obj.length; i < len; ++i) {
copy[i] = clone(obj[i]);
}
return copy;
}
// Handle Object
if (obj instanceof Object) {
copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr))
copy[attr] = clone(obj[attr]);
}
return copy;
}
throw new Error("Unable to copy obj! Its type isn't supported.");
}
早就解决了。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 返回语句后的函数声明全局变量不会被覆盖
- 如何保护全局变量以在 Node.js 中被覆盖
- 为什么我已经定义的全局变量被IE8中的另一个var语句覆盖
- 拼接上的Javascript全局变量作用域/覆盖
- 试图覆盖全局变量时出现jQuery.post()作用域问题
- 构造函数函数.可以't覆盖对全局变量的引用
- 覆盖全局变量
- 访问函数内被覆盖的全局变量
- Javascript -克隆的全局变量被覆盖
- 为什么我的全局变量在JSFiddle上被覆盖
- 覆盖现代浏览器中的全局变量
- 用局部变量覆盖全局变量