Я играю в додзё сегодня, у меня есть такая вещь, которую я хотел бы подтвердить у вас, экспертов по додзё!
я создал такой образец модуля, например
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!
У меня вопрос: это абсолютно правильно? какая-нибудь рискованная дыра? безопасно ли использовать такую схему кодирования в продакшене? Я не совсем эксперт по додзё. Любой орган может предоставить информацию / комментарий / жалобу по поводу моего заключения. Очень оценил.