アプリで (私にとっては) 説明のつかない動作が見られます。require() を介していくつかのインクルードがあります。そのうちの 1 つである「addUserFunction.js」には、2 つの関数とオブジェクトを含む配列があります。
オブジェクト配列の定義は次のとおりです。
exports.itemList = [{itemType:"info",itemName:"Information"},{...},{...}];
これは、2 つの関数の定義です。
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;