我今天在玩道场,我想和您一起道场的专家们来确认一下!
我已经创建了一个示例模块,例如
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);
})