Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将静态数组分配给Dojo中的对象?_Javascript_Actionscript_Dojo - Fatal编程技术网

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

Javascript 如何将静态数组分配给Dojo中的对象?,javascript,actionscript,dojo,Javascript,Actionscript,Dojo,我的设置类似于,但在DOM中,我可以看到它被设置为构造函数styleNames.constructor.dataContexts,并且具有未定义的值 背景故事:我正在将ActionScript代码移植到JavaScript,需要维护现有的接口。我正在移植的ActionScript代码示例如下: define(["dojo/_base/declare"], function (declare) { // module: // StyleNames // summa

我的设置类似于,但在DOM中,我可以看到它被设置为构造函数
styleNames.constructor.dataContexts
,并且具有未定义的值

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

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

你的申报单上写对了。在我看来,这是定义静态变量最明确的方法。在
console.log
code中,您只是没有正确引用
dataContexts
变量。它是一个静态变量,因此不属于任何一个实例。您希望这样引用它:
StyleNames.dataContexts

编辑:这里可能还有语法错误。去掉
样式名下的第二个逗号。dataContexts
声明:

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(){}
}
按如下方式访问变量:

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

this.dataContexts
instanceRef.dataContexts

相反,我认为这是正确的做法:

StyleNames.dataContexts

请参阅jsFiddle上的一个工作示例:

尽管后面的死亡逗号确实令人担忧,但实际上没有现代浏览器会阻塞它,IE7或IE8“修复”了这个致命的“错误”。不过,还是要小心。但现代浏览器并不在意(比如PHP也不在乎)。这一点很好,@JaredFarrish。我知道我曾经被它咬过,但是我想不起来哪种浏览器会被它噎住。谢谢你的回复!我遗漏了我曾尝试将其作为静态引用(“StyleNames.dataContexts”),但这也给出了一个未定义的错误。我还尝试在构造函数中创建一个实例变量,但在声明之外设置值。删除多余的逗号也没有帮助:(你是正确的,OP也是正确的。在声明中,
eval(declaredClass)引用的一个简单变量).StaticName
是这样创建的。但是,所述模块的实例与其“静态”内容之间没有继承关系。明白了,谢谢!诀窍是将其他变量设置为静态变量(这是它们应该有的).我想我已经试过了,但是哦,这就是我在周末工作得到的结果。@我的答案是正确的,但这个答案从一开始就是正确的。
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);

});​