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

标签 javascript variables static 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类静态变量!

我的问题是:这绝对正确吗?有什么危险的漏洞吗?如果我在生产中使用这样的编码模式安全吗?我并不是真正的道场专家。任何机构都可以提供有关我的结论的信息/评论/投诉。非常欣赏。

最佳答案

我没有立即发现它有什么问题。一件事是您需要该类的一个实例才能使其工作。我在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/

相关文章:

javascript - Aurelia 中的模板与类

javascript - 我在解析 JSON 时遇到错误

c++ - 如何保证一个类至少有一个实例?

.net - 在Powershell中动态检索类信息

javascript - 什么是索引函数的纯函数方法?

javascript - 在 JavaScript 中将 'this' 作为参数传递

javascript - 如何将 jQuery 变量传递给插件属性?

javascript - jQuery 中的变量

ios - Swift 单例或全局变量 - 或者其他什么?

c# - 使用 GetProperties 方法时如何排除静态属性