2013-03-04 36 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

这似乎是一个非常糟糕的主意,所以我不会发布任何代码。然而,如果你只是为了“教育目的”而追求答案,那么我只会暗示,虽然你不能轻易地从一个范围之外重新定义一个函数(如你的例子),但是没有什么能够阻止你重新定义一个函数函数对象。

但是我认为,无论您尝试解决的问题是什么,都有更好的解决方案。

相关问题