2013-05-22 2 views
-2

Я не гуру в JS. Сегодня мне сказали, во время проверки кода, что для следующего кода ниже, значения Reference типа должны быть инициализированы в конструкторе, который означает, что изменить это каким-то образом со ссылкой на ограничения: {}Значения ссылочного типа и инициализация

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

не уверен, что это значит, и почему мне нужно переместить это, и если это вещь Додзе или простая вещь JS, о которой нужно беспокоиться и почему.

ответ

3

Я бы сказал, что это вещь додзё, это связано с тем, как dojo реализует класс-подобную систему. Чтобы понять, почему это важно, взгляните на этот недавний вопрос: Dojo instances of same widgets are not saparated.

Как уже упоминалось, массивы и объекты разделяются между экземплярами, поэтому, если вы не хотите этого поведения, вы должны инициализировать их в своем конструкторе. Dojo docs on declare

+0

большое спасибо! Только одно из МНОГИХ вещей, чтобы узнать о Dojo (gotchas). – PositiveGuy

1

Ваши ограничения будут общий объект во всех случаях xxxTextBox если в конструкторе вы не назначить новый объект ограничений:

this.constraints = {};

Это связано с тем, что значение ограничений является частью объекта-прототипа, и поэтому это javascript. Как только вы назначаете this.constraints, вы скрываете ссылку на общие ограничения с собственными локальными копиями объектов.

Смежные вопросы