2016-02-03 132 views
1

目的:我需要调用主函数内的子函数;Javascript函数和嵌套函数

函数声明:

var MainFunction = function() { 

    function NestedFunc1(){ 
     console.warn("NestedFunc1"); 
    }; 

    function NestedFunc2(){ 
     console.warn("NestedFunc2"); 
    }; 
} 

函数调用:

MainFunction.NestedFunc1();

MainFunction.NestedFunc2();

  • 我在做什么错?

10x;

+1

*我在做什么错?*几乎所有的东西,你基本上对嵌套函数和对象属性之间的区别感到困惑。 *我需要在主函数中调用子函数。*但那不是你当时所做的;你正试图在主函数上调用一个属性。顺便说一下,你打算让'MainFunction'自己做一些事情,还是只是一种容器? PS。函数不以分号结尾;如果你在那里放一个,它只会产生一个空的陈述; –

回答

1

你可以把它公开通过属性然后

function MainFunction () { 

    this.nestedFunc1 = function(){ 
     console.warn("NestedFunc1"); 
    }; 

    this.nestedFunc2 = function(){ 
     console.warn("NestedFunc2"); 
    }; 

} 

现在你可以通过做

var malObj = new MainFunction(); 
malObj.nestedFunc1(); 

然而之外调用此函数,如果你想仍然调用它像MainFunction.NestedFunc1()然后使它

var MainFunction = { 

    NestedFunc1:function(){ 
     console.warn("NestedFunc1"); 
    }, 

    NestedFunc2:function(){ 
     console.warn("NestedFunc2"); 
    } 
} 
1

问题是这两个函数都是隔离的d在功能范围内。把它们想象成私人功能。

一种(多)的解决方案可能是定义MainFunction作为具有一些功能属性的纯醇”对象:

var MainFunction = { 
    NestedFunction1: function() { .. }, 
    NestedFunction2: function() { .. } 
}; 

注意,逗号是需要分离的,因为这样的功能,我们正在定义它们。然后您只需拨打

MainFunction.NestedFunction1(); 

另请注意,只要您不希望在该对象内部具有其他“专用”功能,此模式就没有问题。