关于javascript'classes'的函数表达式与函数声明

时间:2011-06-13 06:19:14

标签: javascript oop class closures

在实现“私有方法”时,何时使用函数表达式而不是函数声明是有意义的?在这两种情况下,函数都是封装的,唯一的实际区别似乎是我无法在构造函数中调用myFunc1。我知道我应该以任何方式使用原型属性,但我只是好奇。

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

    var myFunc1 = function()
    {
    }

    function myFunc2()
    {
    }
}

2 个答案:

答案 0 :(得分:1)

您可以调用分配给变量的函数,但必须先分配它才能调用它:

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

答案 1 :(得分:0)

如果要立即调用函数,则必须使用表达式。

这个调用它并将返回值赋给变量:

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() {
    }
}