2013-03-04 103 views
1

的一部分,我有一個功能,看起來像這樣:重新定義的函數,而另一個函數

function outer() { 
    function inner_1() { 
     alert('inner_1'); 
    } 

    function inner_2() { 
     alert('inner_2'); 
    } 

    function inner_3() { 
     alert('inner_3'); 
    } 

    inner_1(); 
    inner_2(); 
    inner_3(); 
} 

我需要調用outer(),但我想使用其他功能,以取代inner_1()

我已經試過這樣:

new_outer = outer; 

new_outer.inner_1 = function() { 
    alert('my new inner function'); 
}; 

如果我嘗試調用新重新定義inner_1這樣的:

new_outer.inner_1(); 

它按預期工作(「我的新的內部函數」被警告)。

但是,如果我試圖調用外部函數:

new_outer(); 

inner_1舊版本被調用。

我想重新定義inner_1並致電outer。我怎樣才能做到這一點?

+0

在JavaScript中做到這一點的唯一方法(我絕對不建議編寫這樣的代碼)將在外部函數上調用'.toString()',替換內部函數,然後轉換回實際功能。一旦函數被實例化,它就不能被改變(並且注意上面描述的可怕過程不會改變函數,而是創建一個新函數)。 – Pointy 2013-03-04 18:50:31

+2

不改變'outer'就不能完成。你能否收到一個參數,例如一個標誌,告訴應該使用哪個'inner1',或者可能接收'inner1'作爲參數? – 2013-03-04 18:50:57

+1

@如果'outer'關閉了一些不可見的東西從而導致打印機不能工作 – 2013-03-04 18:51:29

回答

0

這似乎是一個非常糟糕的主意,所以我不會發布任何代碼。然而,如果你只是爲了「教育目的」而追求答案,那麼我只會暗示,雖然你不能輕易地從一個範圍之外重新定義一個函數(如你的例子),但是沒有什麼能夠阻止你重新定義一個函數函數對象。

但是我認爲,無論您嘗試解決的問題是什麼,都有更好的解決方案。

相關問題