我构建了一个客户端数据集以发布到服务器。使用Add按钮的onClick事件,我收集表单数据并将其存储在内部数组中。这是一些人为/示例代码来试图证明这个问题(不幸的是,我无法分享源代码)。对象引用持久超越变量声明
var getDataFromForm = (function() {
var _internal = {}; /* Based on feedback, I think this is the reason for the behavior I'm experiencing */
return function() {
var form = {};
/* Get the form data */
_internal.name = form.name;
_internal.id = form.id;
return _internal;
};
}());
var internal = { vals: [] };
function onClick() {
var newData = getDataFromForm();
doAjaxValidation({
success: function() {
internal.vals.push(newData); /* All values in array have been updated to this newData reference on click */
internal.vals.push(JSON.parse(JSON.stringify(newData))); /* ugly, but the reference is broken and future clicks work as expected */
internal.vals.push($.extend({}, newData)); /* reference to the object is still persisted through jQuery's extend */
}
});
}
我很困惑,为什么newData
参考交给的newData
每个按钮单击新任务。每个点击事件都是一个新的函数调用,并且newData
(理论上)应该是一个新的对象,与任何其他按钮点击中的newData
无关。
我错过了什么?
编辑:此示例来自一个更大的代码块,我试图将其减少到最简单的可能表达式。显然,这不是一个功能性的代码片段。
我猜这个问题是在getDataFromForm ...你可以分享代码吗? – Prestaul 2012-04-16 19:37:57
*“我错过了什么?”*不确定,但我们缺少的是代码,它显然会返回有关该对象的问题。仅供参考,对象本身从不复制到任务中。被复制的值是对该对象的引用。 – 2012-04-16 19:48:58
为什么你放弃了自己的问题? – 2012-04-17 00:03:23