2

我今天在玩道场,我有这样的事情想和你道场专家确认!

我创建了这样一个示例模块,例如

定义(“xmodules/staticvartest”,[“dojo/_base/declare”,“dojo/_base/lang”],函数(声明,语言){
    var sttestvar = "staticTestOrginal";
    return declare("xmodules.staticvartest", null, {
        构造函数:函数(选项){
            lang.mixin(这个,选项);
            this.dytestvar = "dynamicTestOrginal";
        },
        设置数据:函数(s,d){
            sttestvar = s;
            this.dytestvar = d;
        },
        显示:函数(){
            console.log(this.from + ", dytestvar=[" +this.dytestvar+ "], sttestvar= [" +sttestvar+ "]" );
        },              
    });
});

我调用这个momdule,作为

要求([“xmodules/staticvartest”],函数(SVTest){
     var o1 = 新的 SVTest({
             “来自”:“来自obj1”,
        });
var o2 = 新的 SVTest({
            “来自”:“来自obj2”,
        });     
        o1.show();
        o2.show();
        控制台.log("");

        o1.setthedata("ST_FROM_O1", "DY_FROM_O1");
        o1.show();
        o2.show();
        控制台.log("");

        o2.setthedata("ST_FROM_O2", "DY_FROM_O2");
        o1.show();
        o2.show();
    });

并得到了结果:

  fromobj1, dytestvar=[dynamicTestOrginal], sttestvar= [staticTestOrginal]
  fromobj2, dytestvar=[dynamicTestOrginal], sttestvar= [staticTestOrginal]

  fromobj1, dytestvar=[DY_FROM_O1], sttestvar= [ST_FROM_O1]
  fromobj2, dytestvar=[dynamicTestOrginal], sttestvar= [ST_FROM_O1]

  fromobj1, dytestvar=[DY_FROM_O1], sttestvar= [ST_FROM_O2]
  fromobj2, dytestvar=[DY_FROM_O2], sttestvar= [ST_FROM_O2]

从中您已经注意到sttestvar的行为非常类似于 java 类静态变量!

我的问题是:这绝对正确吗?有什么危险的洞吗?如果我在生产中使用这种编码模式是否安全?我不是真正的道场专家。任何机构都可以提供有关我的结论的信息/评论/投诉。非常欣赏它。

4

1 回答 1

3

我没有立即看到任何问题。一件事是你需要一个类的实例才能工作。我在dojo中看到静态的方式是这样的

    define([], function(){
        var o = declare(...);
        o.sttestvar = "staticTestOrginal";
        return o;
    });

然后你不需要类的实例来使用该静态,即

    require([ "xmodules/staticvartest" ], function(SVTest) {
        console.log(SVTest.sttestvar);
    })
于 2013-11-22T16:40:22.977 回答