выражение функции против объявления функции относительно javascript 'классы' - PullRequest
0 голосов
/ 13 июня 2011

Когда имеет смысл использовать выражения функций вместо объявлений функций при реализации «частных методов»? В обоих случаях функции инкапсулированы, единственное практическое различие заключается в том, что я не смог бы вызвать myFunc1 в конструкторе. Я знаю, что должен использовать свойство prototype в любом случае, но мне просто любопытно.

function myClass
{
    myFunc1() //error
    myFunc2() //success

    var myFunc1 = function()
    {
    }

    function myFunc2()
    {
    }
}

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Вы можете вызвать функцию, назначенную переменной, но вы должны назначить ее, прежде чем сможете ее вызвать:

function myClass() {

  var myFunc1 = function() {
  }

  myFunc1() //success
  myFunc2() //success

  function myFunc2() {
  }

}

Эти функции являются локальными для конструктора, поэтому это не то же самое, что использованиепрототип.Чтобы сделать публичную функцию, вам нужно присвоить ее объекту:

function myClass() {

  this.myPublicFunc1 = function() {
  }

  this.myPublicFunc2 = myFunc2;

  function myFunc2() {
  }

}

var o = new myClass();
o.myPublicFunc1() //success
o.myPublicFunc2() //success
0 голосов
/ 13 июня 2011

Вы должны использовать выражение, если хотите немедленно вызвать функцию .

Этот вызывает его и присваивает возвращаемое значение переменной:

function myClass {

    var myVar = function() {
       return 'some value';  // <--- 2. assign the return value to the variable
    }();  // <--- 1. invoke the function immediately

    function myFunc2() {
    }
}

Этот вызывает его, но назначает саму функцию переменной:

function myClass {

    var myFunc1;

    (myFunc1 = function() {  // <--- 1. assign the function to the variable
       // Do something
    })();  // <--- 2. invoke the function immediately

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