2013-11-14 94 views
2

今天我正在玩道場,我有這樣的事情,我想向你確認道場專家!如何使用聲明定義dojo靜態變量或靜態對象

我已經建立這樣的樣品模塊,如

 
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+ "]" ); 
     },    
    }); 
}); 

,我調用此momdule,如

 

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(); 
    }); 

和GOT結果:

    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類的靜態變量!

我的問題是:這是絕對是是否正確?任何危險的漏洞?如果我在生產中使用這種編碼模式是否安全?我不是真正的道場專家。任何機構都可以提供有關我的結論的信息/評論/投訴。非常讚賞它。

+0

請把你的代碼的縮進或標記它作爲代碼。你的問題是不可讀的。 – Layke

+0

你可能看到現在它是可讀代碼,任何線索回合問題? – user2993409

回答

3

我沒有看到任何立即錯誤的東西。有一件事是你需要一個類的實例才能工作。我已經在道場看到靜態的方法是這樣的

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

那麼你不需要類的實例來使用靜態的,即

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

非常好,謝謝! – user2993409