2016-08-19 2 views
1

У меня есть пользовательский класс/виджет, определенный в додзё. Как сделать некоторые из его атрибутов/методов частными?Как сделать частный атрибут/метод в Dojo?

Документация Dojo защищает использование _underscore, чтобы пометить атрибут/метод как закрытый, но это, по-видимому, просто соглашение и на самом деле не делает атрибут/метод закрытым.

define(
    ["dojo/_base/declare"], 
    function(declare) { 
     declare("MyWidget", [_WidgetBase], { 
      publicAttr: 8, 
      publicMethod: function() { ... }, 
      _privateAttr: 7, 
      _privateMethod: function() { ... } 
     }); 
    } 
); 

ответ

2

Обычно при разработке в JavaScript, разработчики предпочитают префикс своих частных пользователей с подчеркиванием, чтобы другие разработчики не знают, прикоснуться к ним. Это просто конвенция, а не частная.

В JavaScript очень легко сделать переменные и функции частными (локальные переменные и функции). К сожалению, невозможно сделать свойства объектов частными.

Если вы действительно не хотите, чтобы функция/переменная не была доступна из объекта, вы могли бы реализовать что-то вроде ниже.

define(["dojo/_base/declare"], function(declare) { 

    function privateFunction(obj){ 
     //do something private 
    } 

    declare("MyWidget", [_WidgetBase], { 
     publicAttr: 8, 
     publicMethod: function() { 
      privateFuntion(this); 
     }, 
    }); 
}); 

Здесь функция privateFunction доступна mehtods виджета и другие не смогут вызвать функцию через экземпляр виджета.

Вы можете сделать контекст функции виджетам, тогда вы сможете получить доступ ко всем свойствам виджета через this и не нужно передавать экземпляр виджета в качестве параметра. Есть несколько способов добиться этого. Вы могли бы вы lang.hitch. Мой любимый

privateFunction.call(this, args..); 

Надеюсь, это было полезно.

+0

Я думаю, что доджо использовать соглашение об именовании подчеркивания, чтобы указать частные переменные. – Radex

+0

Да и частные функции тоже. –

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