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

问题描述 投票:1回答:1

有人可以解释为什么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'}
javascript factory
1个回答
1
投票

由于对象引用。您的Form函数返回一个对象,该对象的属性oSettings指向{ test: 'something' }。之后,调用myForm.init(),这会将oSettings函数中的变量Form重新分配为{ test2: 'Something else' }。这与通过调用Form()返回的对象无关。调用myForm.getSettings()时,将获得新分配的对象。调用myForm.oSettings时,将获得在编译时声明的原始对象。

© www.soinside.com 2019 - 2024. All rights reserved.