我今天在打道场,有这么一件事想跟各位道场高手确认一下!
我创建了这样一个示例模块,例如
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+ "]" ); }, }); });
我调用这个模块,如
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);
})
关于javascript - 如何使用declare定义dojo静态变量或静态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986454/