我今天在玩道场,我想和您一起道场的专家们来确认一下!

我已经创建了一个示例模块,例如

define(“ xmodules / staticvartest”,[“ dojo / _base / declare”,“ dojo / _base / lang”],function(declare,lang){
    var sttestvar =“ staticTestOrginal”;
    返回clarify(“ xmodules.staticvartest”,null,{
        构造函数:function(options){
            lang.mixin(this,options);
            this.dytestvar =“ dynamicTestOrginal”;
        },
        setthedata:function(s,d){
            sttestvar = s;
            this.dytestvar = d;
        },
        显示:function(){
            console.log(this.from +“,dytestvar = [” + this.dytestvar +“],sttestvar = [” + sttestvar +“]”));
        },
    });
});



我引用这个备忘录


require([“ xmodules / staticvartest”],function(SVTest){
     var o1 = new SVTest({
             “ from”:“ fromobj1”,
        });
var o2 = new SVTest({
            “ from”:“ fromobj2”,
        });
        o1.show();
        o2.show();
        console.log(“”);

        o1.setthedata(“ ST_FROM_O1”,“ DY_FROM_O1”);
        o1.show();
        o2.show();
        console.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类的静态变量!

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

最佳答案

我没有看到任何立即出问题的地方。一件事情是,您需要一个类的实例才能使其正常工作。我在dojo中看到静力学的方式是这样的

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


然后,您不需要该类的实例即可使用该静态对象,即

    require([ "xmodules/staticvartest" ], function(SVTest) {
        console.log(SVTest.sttestvar);
    })

09-16 01:30