2013-05-22 50 views
-2

我不是JS的專家。 {}引用類型值和初始化

define(["dojo/_base/declare", 
    "dijit/form/CurrencyTextBox", 
    "xxxx/util/currencyUtil", 
    "./_InputWidgetMixin", 
    "../secure/_SecureWidgetMixin" 
], 
    function (declare, xxxTextBox, xxxUtil, _InputWidgetMixin, _SecureWidgetMixin) { 

     return declare("xxx.widget.input.xxxTextBox", [xxxTextBox, _InputWidgetMixin, _SecureWidgetMixin], { 

      constraints: {}, 

      reset: function() { 
       this._set("value", this.resetValue); 
      }, 

不知道這意味着什麼和:今天我在代碼審查,對下面的下面的代碼,引用類型的值需要在這意味着改變這種莫名其妙參照約束構造函數初始化時告訴爲什麼我需要移動它,如果這是一個Dojo的東西或簡單的JS的事情擔心和爲什麼。

回答

3

我會說這是一個道場的事情,它與dojo如何實現一個類類系統有關。要理解爲什麼這很重要,請查看最近的這個問題:Dojo instances of same widgets are not saparated

如前所述,數組和對象是跨實例共享的,所以如果你不想要這種行爲,你應該在你的構造函數中初始化它們。 Dojo docs on declare

+0

非常感謝!只是要學習Dojo的許多事情之一(陷阱)。 – PositiveGuy

1

你的約束將是跨xxxTextBox的所有實例共享對象,除非在構造函數分配一個新的對象來約束:

this.constraints = {};

這是因爲約束值是原型對象的一部分,因此這是一個JavaScript的東西。一旦分配了this.constraints,就會使對象自己的本地副本模糊對共享約束的引用。