dojo.mixin没有按预期工作

时间:2013-05-28 12:02:29

标签: javascript dojo

我认为我没有按要求使用dojo.mixin ......

我有以下代码:

dojo.declare("A",null,{
    _configuration: {},
    constructor: function(configuration)
    {
        if(this._configuration.something === 2)
        {
            // we should never come here; the constructor is only called on a new instance which should still have an empty _somethingPrivate
            // because the class declaration says so
            console.log("why does this happen?");
        }

        // merge empty configuration 
        dojo.mixin(this._configuration, configuration);
    }
});

var myInstance = new A({ something: 2 });
var myInstance = new A({});

据我了解,您可以使用dojo.mixin合并对象。我尝试将默认配置对象与给定参数(在对象中)合并,但控制台输出是“为什么会发生这种情况?”所以来自先前对象的参数被合并到 new 对象中。

任何人都可以对此有所了解吗?

顺便说一句:dojo版本1.6(我们还不能升级)

1 个答案:

答案 0 :(得分:3)

因为您将配置定义为_configuration: {},,所以它将在窗口小部件的所有实例之间共享。因此,当您初始化第二个实例时,它会从第一个实例中看到配置。有关详细信息,请参阅http://dojotoolkit.org/reference-guide/1.6/dojo/declare.html

_defaultConfig: {},

_configuration: null,

constructor: function(config) {
    // clone to use a separate object.
    this._configuration = dojo.mixin(dojo.clone(this._defaultConfig), config);
}