如果我有:
var myFunction = function() {
var myInner = function() {
}
}
然后如何调用myFunction.myInner()?
答案 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");
虽然取决于你想要达到的目标,但这可能并不理想。
答案 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();
}