我需要保持对象的整体布局。我把它传递给一个方法并且:
现在它的设置方式是从主对象以及底部方法中删除它。 SEE JSFiddle代码http://jsfiddle.net/rwux4rta/要从运行中获取结果,请参阅console
请帮助!
$( document ).ready(function() {
var pList = new Object();
pList["test"] = "test"; //this is being deleted from BOTH instances of the Obj
pList["test1"] = "test1";
pList["test2"] = "test2";
pList["test3"] = "test3";
pList["test4"] = "test4";
displayData(pList);
console.log(pList);
});
function displayData(badData){
badData.test.removeData();
console.log(badData);
}
答案 0 :(得分:1)
换句话说,您的问题是询问如何按值传递JavaScript对象,而不是通过引用传递。默认情况下,JavaScript通过引用传递所有对象,因此您已经注意到,对函数中该对象的任何修改也会影响原始对象。
查看此主题以了解如何按值完成传递:
答案 1 :(得分:1)
您可以在删除“错误”数据之前克隆该对象。我使用以下函数根据https://stackoverflow.com/a/728694/1143670中的建议克隆对象。
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
您需要更新displayData函数,以便克隆“badData”参数中的数据。
function displayData(badData){
var newBadData = clone(badData);
delete newBadData.test;
console.log(newBadData);
}
其余部分应保持不变,仅在镀铬中进行测试。有关工作示例,请参阅此fiddle。
答案 2 :(得分:1)
尝试
$(document).ready(function() {
var pList = new Object();
pList["test"] = "test"; //this is being deleted from BOTH instances of the Obj
pList["test1"] = "test1";
pList["test2"] = "test2";
pList["test3"] = "test3";
pList["test4"] = "test4";
// extend `pList` to `_pList` object
var _pList = $.extend({}, pList);
displayData(_pList);
console.log(pList, "original");
});
function displayData(badData){
delete badData.test;
console.log(badData, "extended");
}