我正在建立一个客户端数据集合以发布到服务器。使用 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
我错过了什么?
编辑:此示例来自更大的代码块,我试图将其简化为最简单的表达式。显然,按原样,这不是一段功能代码。