重新定义作为另一个函数一部分的函数

Redefining a function which is part of another function

本文关键字:函数 另一个 一部分 新定义 定义      更新时间:2023-09-26

我有一个函数,看起来像这样:

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();

它按预期工作('my new inner function'被提醒)。

但是如果我尝试调用外部函数:

new_outer();

调用旧版本的inner_1

我想重新定义inner_1和调用outer。我怎样才能做到这一点呢?

这似乎是一个非常糟糕的主意,所以我不打算发布任何代码。然而,如果你只是为了"教育目的"而寻求答案,我将只是提示你,尽管你不能轻易地从它的作用域之外重新定义一个函数(根据你的例子),没有什么可以阻止你重新定义一个附加到函数对象的函数。

无论你想解决什么问题,我都认为有更好的解决办法。