Члены парламента, не занимающие официального поста при расширении использования класса ExtJS

Я провел некоторое исследование на форуме ExtJS относительно закрытых методов и полей в расширенном классе, и я не мог найти реальный ответ на это.

И когда я говорю, что расширенный класс имею в виду что-то вроде этого:

Ext.ux.MyExtendedClass = Ext.extend(Ext.util.Observable, {
    publicVar1: 'Variable visible from outside this class',
    constructor: function(config) { this.addEvents("fired"); this.listeners = config.listeners; }, // to show that I need to use the base class
    publicMethod1: function() { return 'Method which can be called form everywhere'; },
    publicMethod2: function() { return this.publicMethod1() + ' and ' + this.publicVar1; } // to show how to access the members from inside another member
});

Проблема здесь состоит в том, что все общедоступно. Так, как я добавляю новую переменную o метод в рамках MyExtendedClass, к которому нельзя получить доступ снаружи, но может быть доступом открытыми методами?

11
задан Mariano Desanze 28 April 2010 в 17:52
поделиться

2 ответа

Я использую что-то вроде следующего .

  var toolbarClass = Ext.extend( Ext.Container,
  {
    /**
     * constructor (public)
     */
    constructor: function( config )
    {
      config = config || {};

      // PRIVATE MEMBER DATA ========================================
      var accountId = Ext.id( null, 'ls-accountDiv-');

      // PUBLIC METHODS ========================================
      this.somePublicMethod = function(){
         console.log( accountId );
      };

...
4
ответ дан 3 December 2019 в 03:17
поделиться

В следующем примере показан способ верхнего уровня для определения привилегированных частных и общедоступных членов . Но также показано, как определить частные статические члены (также называемые членами класса ) и общедоступные непривилегированные члены . Используя эти последние 2 вместо привилегированных, мы сократим время инициализации, поскольку они не анализируются каждый раз, когда вы создаете новый объект вашего класса:

 Ext.ux.MyExtendedClass = Ext.extend (Ext.util.Observable, (function () {// частные статические поля (доступ возможен только в области видимости: минимальные привилегии).var privStaticVar = 0; // частные статические функции (могут иметь доступ только к области видимости и аргументам, но мы можем отправить им область действия параметром) var privateFunc1 = function (me) {return me.name + '-> ClassVar:' + privStaticVar; }; var privateFunc2 = function (me) {return me.publicMethod1 () + 'InstanceVar:' + me.getPrivateVar (); }; return {constructor: function (config) {// привилегированные частные / общедоступные члены (могут получить доступ ко всему частному и общедоступному) var privateVar = config.v || 0; вар PrivInstFunc = функция () {privateVar + = 1; }; this.name = config.name; this.incVariables = функция () {privInstFunc (); privStaticVar + = 1; }; this.getPrivateVar = функция () {return privateVar; }; }, // открытые члены (могут иметь доступ к открытым и закрытым статическим элементам, но не к членам, определенным в конструкторе) publicMethod1: function () {this.incVariables (); return privateFunc1 (это); }, publicMethod2: function () {return privateFunc2 (this); }}; } ())); функция test () {var o1 = new Ext.ux.MyExtendedClass ({name: 'o1', v: 0}); var o2 = новый Ext.ux.MyExtendedClass ({имя: 'o2', v: 10}); var s = o1.publicMethod2 () + '
' + o1.publicMethod2 () + '

' + o2.publicMethod2 () + '
' + o2.publicMethod2 (); Ext.get ("вывод"). Update (s); }
    

Нажмите кнопку, чтобы создать 2 объекта и вызвать каждый объект 2 раза:

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

23
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: