如何使用 dedeclare 定义 dojo 静态变量或静态对象

How to define dojo static variables or static objects by using declare

本文关键字:静态 变量 对象 dojo 何使用 dedeclare 定义      更新时间:2023-09-26

我今天在玩道场,我有这样的事情我想和你们道场专家确认一下!

我创建了这样一个示例模块,例如

define("xmodules/staticvartest", [ "dojo/_base/declare", "dojo/_base/lang"], function(declare, lang) {    var sttestvar = "staticTestOrginal";    return declare("xmodules.staticvartest", null, {        构造函数 : 函数(选项) {            Lang.mixin(this, options);            this.dytestvar = "dynamicTestOrginal";        },        setthedata: function(s, d) {            sttestvar = s;            this.dytestvar = d;        },        显示: 函数() {            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类静态变量!

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

我没有立即看到任何问题。一件事是你需要一个类的实例才能正常工作。我在道场中看到的静力学是这样的

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

那么你不需要类的实例来使用该静态的,即

    require([ "xmodules/staticvartest" ], function(SVTest) {
        console.log(SVTest.sttestvar);
    })