有人可以解释为什么myForm.getSettings()和myForm.oSettings在这里返回不同的结果吗?
var Form = (function(){
var oSettings = {test: 'something'};
function init(oOptions){
oSettings = oOptions;
}
function getSettings(){
return oSettings;
}
return {
init: init,
getSettings: getSettings,
oSettings: oSettings
}
});
var myForm = Form();
myForm.init({test2: 'Something else'});
console.log(myForm.getSettings()); // Returns {test2: 'Something else'}
console.log(myForm.oSettings); // Returns {test: 'something'}, expecting {test2: 'Something else'}
由于对象引用。您的Form
函数返回一个对象,该对象的属性oSettings
指向{ test: 'something' }
。之后,调用myForm.init()
,这会将oSettings
函数中的变量Form
重新分配为{ test2: 'Something else' }
。这与通过调用Form()
返回的对象无关。调用myForm.getSettings()
时,将获得新分配的对象。调用myForm.oSettings
时,将获得在编译时声明的原始对象。