JavaScript называя открытый метод от частного в том же объекте

После хороших принципалов дизайна OO и шаблонов разработки имеет большое значение для создания Вашего кода, легкого поддержать и понять. Но одной из лучших вещей, которые я обнаружил недавно, являются сигналы, и слоты иначе публикуют/подписывают. Взгляните на http://markdotmeyer.blogspot.com/2008/09/jquery-publish-subscribe.html для простой реализации jQuery.

идея хорошо используется на других языках для разработки GUI. Когда что-то значительное происходит где-нибудь в Вашем коде, Вы публикуете глобальное синтетическое событие, на которое могут подписаться другие методы в других объектах. Это дает превосходное разделение объектов.

я думаю Dojo (и Прототип?) имеют созданный в версии этой техники.

видят также , Что такое сигналы и слоты?

12
задан Benjamin 3 November 2013 в 13:17
поделиться

4 ответа

сделайте что-нибудь вроде:

var myObject = function() {
   var p = 'private var';
   function private_method1() {
      public.public_method1()
   }

   var public = {
      public_method1: function() {
         alert('do stuff')
      },
      public_method2: function() {
         private_method1()
      }
   };
   return public;
} ();
//...

myObject.public_method2()
15
ответ дан 2 December 2019 в 04:25
поделиться

public_method1 не является общедоступным методом. Это метод анонимного объекта, который полностью создается внутри оператора return вашей функции-конструктора.

Если вы хотите его вызвать, почему бы не структурировать объект следующим образом:

var myObject = function() {
    var p...
    function private_method() {
       another_object.public_method1()
    }
    var another_object = { 
        public_method1: function() {
            ....
        }
    }
    return another_object;
}() ;
3
ответ дан 2 December 2019 в 04:25
поделиться

Не знаю прямого ответа, но следующее должно работать.

var myObject = function() 
{
   var p = 'private var';   
  function private_method1() {
   _public_method1()
  }
  var _public_method1 =  function() {
         // do stuff here
    }

  return {
    public_method1: _public_method1
  };
} ();
0
ответ дан 2 December 2019 в 04:25
поделиться

Почему бы не сделать это как нечто, что вы можете создать?

function Whatever()
{
  var p = 'private var';
  var self = this;

  function private_method1()
  {
     // I can read the public method
     self.public_method1();
  }

  this.public_method1 = function()
  {
    // And both test() I can read the private members
    alert( p );
  }

  this.test = function()
  {
    private_method1();
  }
}

var myObject = new Whatever();
myObject.test();
14
ответ дан 2 December 2019 в 04:25
поделиться
Другие вопросы по тегам:

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