问题描述
||
在实现“私有方法”时,何时使用函数表达式代替函数声明有意义?在这两种情况下,函数都是封装的,唯一实际的区别似乎是我无法在构造函数中调用myFunc1。我知道我应该以任何一种方式使用prototype属性,但是我很好奇。
function myClass
{
myFunc1() //error
myFunc2() //success
var myFunc1 = function()
{
}
function myFunc2()
{
}
}
解决方法
您可以调用分配给变量的函数,但是必须先分配它,然后才能调用它:
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
, 如果要立即调用该函数,则必须使用表达式。
这将调用它并将返回值分配给变量:
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() {
}
}