0

我想我没有按要求使用 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 来合并对象。我尝试将默认配置对象与给定参数(在对象中)合并,但控制台输出是“为什么会发生这种情况?” 因此来自先前对象的参数被合并到一个对象中。

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

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

4

1 回答 1

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);
}
于 2013-05-28T12:10:35.947 回答