Как определить статические переменные или статические объекты dojo с помощью declare

Я играю в додзё сегодня, у меня есть такая вещь, которую я хотел бы подтвердить у вас, экспертов по додзё!

я создал такой образец модуля, например

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!

У меня вопрос: это абсолютно правильно? какая-нибудь рискованная дыра? безопасно ли использовать такую ​​схему кодирования в продакшене? Я не совсем эксперт по додзё. Любой орган может предоставить информацию / комментарий / жалобу по поводу моего заключения. Очень оценил.


person user2993409    schedule 14.11.2013    source источник
comment
Оберните код в отступ или пометьте его как код. Ваш вопрос не читается.   -  person Layke    schedule 15.11.2013
comment
как вы можете видеть, теперь это читаемый код, есть какие-нибудь подсказки по поводу вопросов?   -  person user2993409    schedule 15.11.2013


Ответы (1)


Я не вижу в этом сразу ничего плохого. Во-первых, для того, чтобы это работало, вам нужен экземпляр класса. Я видел статику в додзё примерно так

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

Тогда вам не нужен экземпляр класса для использования этой статики, т.е.

    require([ "xmodules/staticvartest" ], function(SVTest) {
        console.log(SVTest.sttestvar);
    })
person Matt R    schedule 22.11.2013