Javascript工厂函数返回未修改的属性

Javascript工厂函数返回未修改的属性,javascript,factory,Javascript,Factory,有人能解释为什么myForm.getSettings()和myForm.oSettings在这里返回不同的结果吗 var Form=(函数(){ 变量设置={ 测试:“某物” }; 函数初始化(oOptions){ oSettings=oOptions; } 函数getSettings(){ 返回设置; } 返回{ init:init, getSettings:getSettings, oSettings:oSettings } }); var myForm=Form(); myForm.in

有人能解释为什么myForm.getSettings()和myForm.oSettings在这里返回不同的结果吗

var Form=(函数(){
变量设置={
测试:“某物”
};
函数初始化(oOptions){
oSettings=oOptions;
}
函数getSettings(){
返回设置;
}
返回{
init:init,
getSettings:getSettings,
oSettings:oSettings
}
});
var myForm=Form();
myForm.init({
测试2:“其他的东西”
});
console.log(myForm.getSettings());//返回{test2:'Something other'}

console.log(myForm.oSettings);//返回{test:'something'},由于对象引用,应为{test2:'something'}
。您的
表单
函数返回一个对象,该对象的属性
oSettings
指向
{test:'something'}
。之后,调用
myForm.init()
,它将
表单中的变量
oSettings
重新分配给
{test2:'Something'}
。这与调用
Form()
返回的对象无关。调用
myForm.getSettings()
时,将获得新分配的对象。当您调用
myForm.oSettings
时,您会在运行时之前声明原始对象。

小麻烦:“您在编译时声明了原始对象”-javascript不是编译语言。@Jamiec谢谢,我修正了它更精确的含义。有没有一种方法可以让工厂模式在不使用getter函数的情况下公开这些属性?或者我应该只使用一个类吗?有一种方法可以修改这个函数,使它像您期望的那样工作。但是最好的方法是使用类。这对getter setter操作更好。