调用内部函数

时间:2011-10-27 19:36:59

标签: javascript

如果我有:

var myFunction = function() {
    var myInner = function() {
    }
}

然后如何调用myFunction.myInner()?

6 个答案:

答案 0 :(得分:3)

你可以这样称呼它:

var myFunction = function() {
    var myInner = function() {}

    return myInner;
}

myFunction()();

在您的示例中,您正在创建内部函数,但您必须将其返回以使其可访问。

答案 1 :(得分:3)

您还可以执行以下操作:

var myFunction = function () {
   this.myInner = function () {
     //...
   }
}

var foo = new myFunction();
foo.myInner();

或者我用来模仿静态类的另一种模式:

var myFunction = new function () {
   this.myInner = function () {
     //...
   }
};

myFunction.myInner();

答案 2 :(得分:2)

如果构建的对象略有不同,可以使用:

var myFunction = {
  innerFunction: function(txt){
    alert(txt);
  }    
}

myFunction.innerFunction("heyooo");

虽然取决于你想要达到的目标,但这可能并不理想。

小提琴:http://jsfiddle.net/neilheinrich/Xjegt/

答案 3 :(得分:1)

你做不到。让我重新提出一个问题来瞥一眼可能做你所问的噩梦世界

var myFunction = function() {
    for(var i=0; i<n; i++){ ... }
}
then how do I set myFunction.i?

如果你想访问内部函数,你需要返回它或者设置一个全局变量,或者如果它是变量而不是函数你也会做的任何事情。

答案 4 :(得分:1)

函数是JavaScript中的范围。您不能在函数内调用函数,除非您将其声明为方法。有人建议您使用对象或奇怪的图案,这可能是您想要的也可能不是......

如果你想要一个带有公共/私有方法和变量的“类类”函数,请执行以下操作:

//Declare your "class"
function Foo(specs) {

    //Can do whatever you want with specs
    //jQuery uses it to initialize plugin data ;)

    //These are examples of private variables
    var a = 1;
    var b = "b";

    //These are examples of public variables
    this.aa = 1;
    this.bb = "b";

    //This is a private method
    function Bar_Private(p0,p1) {...}

    //This is a public method
    this.Bar_Public = function(p0,p1) {...}

}

//Now to use it....
//Create an instance
var myInstance = new Foo();

//Using it
alert(myInstance.a);    //Reference Error
alert(myInstance.aa);   //Alerts 1

myInstance.Bar_Private(0,1);  //Reference Error
myInstance.Bar_Public(0,1);   //Calls Bar_Public with 0 and 1 as params

JavaScript没有实际的类,但最简单的方法是将此模式描述为“类类”。

显然,您可以根据需要添加任意数量的公共/私有方法,对象等。

另请注意,在创建使用此模式的实例时,请勿忘记“新”操作员...如果这样做,则“this”将绑定到您的全局空间并可覆盖其他应用程序数据(名称冲突)。 / p>

希望这有帮助,祝你好运!

答案 5 :(得分:0)

在这种情况下,只能在运行外部函数内部的代码时调用内部函数...除非以某种方式返回内部函数。

var myFunction = function() {
    var myInner = function() {
    }
    // you can call it here
    myInner();
}