Javascript 如何使用declare定义dojo静态变量或静态对象

Javascript 如何使用declare定义dojo静态变量或静态对象,javascript,variables,static,dojo,declare,Javascript,Variables,Static,Dojo,Declare,我今天在玩dojo,我有一件事想和dojo专家们确认一下 我创建了这样一个示例模块,如 define("xmodules/staticvartest", [ "dojo/_base/declare", "dojo/_base/lang"], function(declare, lang) { var sttestvar = "staticTestOrginal"; return declare("xmodules.staticvartest", null, {

我今天在玩dojo,我有一件事想和dojo专家们确认一下

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

define("xmodules/staticvartest", [ "dojo/_base/declare", "dojo/_base/lang"], function(declare, lang) { var sttestvar = "staticTestOrginal"; return declare("xmodules.staticvartest", null, { constructor : function(options) { lang.mixin(this, options); this.dytestvar = "dynamicTestOrginal"; }, setthedata: function(s, d) { sttestvar = s; this.dytestvar = d; }, show: function() { console.log(this.from + ", dytestvar=[" +this.dytestvar+ "], sttestvar= [" +sttestvar+ "]" ); }, }); }); 定义(“xmodules/staticvartest”[“dojo/_base/declare”、“dojo/_base/lang”]、函数(declare,lang){ var sttestvar=“staticTestOrginal”; 返回declare(“xmodules.staticvartest”),null{ 构造函数:函数(选项){ lang.mixin(此选项); this.dytestvar=“dynamicTestOrginal”; }, 设置数据:函数(s,d){ sttestvar=s; this.dytestvar=d; }, show:function(){ 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(); }); require([“xmodules/staticvartest”],函数(SVTest){ var o1=新SVT测试({ “from”:“fromobj1”, }); var o2=新SVT试验({ “from”:“fromobj2”, }); o1.show(); o2.show(); 控制台日志(“”); o1.设置数据(“ST_FROM_o1”,“DY_FROM_o1”); o1.show(); o2.show(); 控制台日志(“”); o2.设置数据(“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专家。任何机构都可以就我的结论提供信息/评论/投诉。非常感谢。

我看不出它马上有什么问题。有一件事是,您需要一个类的实例才能工作。我在dojo中看到的静态是这样的

    define([], function(){
        var o = declare(...);
        o.sttestvar = "staticTestOrginal";
        return o;
    });
那么您不需要类的实例来使用该静态

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

请用缩进方式包装代码或将其标记为代码。你的问题不可读。正如你现在看到的,它现在是可读的代码,关于这个问题有什么线索吗?