如何将静态数组分配给 Dojo 中的对象

How to assign a static array to an object in Dojo?

本文关键字:Dojo 对象 分配 静态 数组      更新时间:2023-09-26
define(["dojo/_base/declare"], function (declare) {
    // module:
    //      StyleNames
    // summary:
    //      Style element names.
    var StyleNames = declare(null, 
        {
            PROP1: "Style1",
            PROP2: "Style2"
        }
    );
    StyleNames.dataContexts = [
        StyleNames.PROP1,
        StyleNames.PROP2,
    ];
    return StyleNames;
});
var styleNames = new StyleNames();
console.log("PROP1 is defined as: ", styleNames.PROP1); // prints "Style1"
console.log("dataContexts is undefined: ", styleNames.dataContexts); // Error: styleNames.dataContexts is undefined

我的设置类似于 https://stackoverflow.com/a/11329956/1610451 但是在DOM中查看,我可以看到它设置为具有未定义值的构造函数styleNames.constructor.dataContexts

背景故事:我正在将ActionScript代码移植到JavaScript,需要维护现有的接口。我正在移植的 ActionScript 代码的一个示例是:

public class StyleNames {
    public static const PROP1 : String = "Style1";
    public static const PROP2 : String = "Style2";
    public static const dataContexts : Array = [
        PROP1,
        PROP2
    ];
    public function StyleNames(){}
}

你的声明是正确的。 在我看来,这是定义静态变量的最明确方法。 在console.log代码中,您只是没有正确引用dataContexts变量。 它是一个静态变量,因此它不属于任何一个实例。 你想这样引用它:StyleNames.dataContexts .

编辑:你还有一个可能的语法错误。 去掉StyleNames.dataContexts声明下的第二个逗号:

StyleNames.dataContexts = [
    StyleNames.PROP1,
    StyleNames.PROP2
];

像这样访问变量:

StyleNames.dataContexts

而不是this.dataContextsinstanceRef.dataContexts

这就是我的思维方式

require(["dojo/_base/declare"], function(declare) {
    var StyleNames = declare(null, {
        constructor: function() {
            // a.k.a public function StyleNames(){}
        },
        // non-static properties and functions here
    });
    // static properties and functions
    StyleNames.PROP1 = "Style1";
    StyleNames.PROP2 = "Style2";
    StyleNames.dataContexts = [
        StyleNames.PROP1,
        StyleNames.PROP2
    ];
    console.log("PROP1: ", StyleNames.PROP1);
    console.log("dataContexts: ", StyleNames.dataContexts);
});​

请参阅jsFiddle的工作示例:http://jsfiddle.net/phusick/6nfhJ/