2016-02-03 182 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(); 

另請注意,只要您不希望在該對象內部具有其他「專用」功能,此模式就沒有問題。