我在我的应用程序中观察到(对我而言)无法解释的行为。我有一些通过 require() 包含的内容。其中一个名为“addUserFunction.js”,我有两个函数和一个包含对象的数组。
这是对象数组的定义:
exports.itemList = [{itemType:"info",itemName:"Information"},{...},{...}];
这是两个函数的定义:
exports.getItem = function(data) {
var returnItem = {};
for (var i=0;i<exports.itemList.length;i++) {
if (exports.itemList[i].itemType == data.itemType){
returnItem = exports.itemList[i]; // This line seems to pass a reference, not assign/copy
}
}
returnItem.itemName = (data.itemName) ? data.itemName : returnItem.itemName;
return returnItem;
}
exports.createPlan = function(formValues) {
var returnItem = {
id: 0,
description: 'foobar',
items: [
exports.getItem({itemType:'info',itemName:'Information'}),
exports.getItem({itemType:'somethingelse'}),
exports.getItem({itemType:'bla',itemName:'yougottheidea'})
]
};
return returnItem;
}
现在的问题是:一旦我使用该函数exports.getItem
并覆盖一些属性,getItem
似乎将新创建returnItem
的与原始的itemList[i]
. 所以下一次调用itemList[i]
使用第一次调用的属性值。希望解释清楚。怎么会这样?
createPlan()
required()
从另一个文件中调用,如下所示:
var aF = require('addUserFunctions');
function addUser() {
var formValues = {name: 'test'};
formValues.foo = aF.createPlan(formValues);
}
module.exports = addUser;