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
。我怎樣才能做到這一點?
在JavaScript中做到這一點的唯一方法(我絕對不建議編寫這樣的代碼)將在外部函數上調用'.toString()',替換內部函數,然後轉換回實際功能。一旦函數被實例化,它就不能被改變(並且注意上面描述的可怕過程不會改變函數,而是創建一個新函數)。 – Pointy 2013-03-04 18:50:31
不改變'outer'就不能完成。你能否收到一個參數,例如一個標誌,告訴應該使用哪個'inner1',或者可能接收'inner1'作爲參數? – 2013-03-04 18:50:57
@如果'outer'關閉了一些不可見的東西從而導致打印機不能工作 – 2013-03-04 18:51:29