Есть ли какое-либо преимущество или недостаток в том, чтобы поместить функцию JavaScript в объект и вызывать их при необходимости? - PullRequest
2 голосов
/ 23 февраля 2011

Например, у меня есть несколько таких функций:

function a() {
    //do something
}

function b() {
    //do something
}
//  call function a
a();
//  call function b
b();

Какие преимущества или недостатки, если я инициализировал функцию таким образом?

var jslib = {
    a: {
        init: function() {
            //do something
        }
    },
    b: {
        init: function() {
            //do something
        }
    }
}
//  init function a
jslib.a.init();
//  init function b
jslib.b.init();

Ответы [ 3 ]

5 голосов
/ 23 февраля 2011

Преимущества

  1. Вы не загрязняете «глобальное пространство имен». Например, глобальная переменная a, объявленная где-либо еще в Javascript, не будет скрывать вашу функцию.
  2. Вы объединяете связанные функции.

Недостатки

  1. Код для вызова функции немного длиннее. (если вы считаете это недостатком)

Хотя, init name предполагает, что эти объекты имеют состояние, поэтому они не только содержат функции. В этом случае две версии даже не эквивалентны.

3 голосов
/ 23 февраля 2011

Основные преимущества определения литералов объектов - не загрязнение глобального пространства имен и более чистая организация кода.

Ребекка Мерфи объясняет преимущества в этом сообщении в блоге:

http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/

Я предпочитаю создавать объекты функционально, а не буквально, потому что функции JS являются первоклассными объектами.Следовательно, вы можете определить открытые методы и свойства, которые могут вызываться вне объекта, но также могут иметь закрытые переменные и функции, которые скрыты вне области видимости объекта.

function Alphabet() {

  // public property
  this.letters = 'xyx';

  // private variable
  var letters = 'abc';

  // public method
  this.speak = function(){
    say("Now I know my ABCs");
  }

  // private function
  function say(message){
    alert(message); 
  }

}

1 голос
/ 23 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...