在引用原始函数时覆盖JavaScript函数

我有一个函数,a()我想要覆盖,但也有原始a()的顺序执行,具体取决于上下文。例如,有时当我生成页面时,我想要覆盖如下:


function a() {

    new_code();

    original_a();

}

有时像这样:


function a() {

    original_a();

    other_new_code();

}

我如何original_a()在超越范围内获得这一点a()?它甚至可能吗?


请不要以这种方式建议替代方法,我知道很多。我特意问这个问题。


12345678_0001
浏览 294回答 3
3回答

有只小跳蛙

你可以这样做:var a = (function() {    var original_a = a;    if (condition) {        return function() {            new_code();            original_a();        }    } else {        return function() {            original_a();            other_new_code();        }    }})();original_a在匿名函数内部声明可以防止它混乱全局命名空间,但它可以在内部函数中使用。像评论中提到的Nerdmaster一样,请务必()在最后添加。您想调用外部函数并将结果(两个内部函数之一)a存储在其中,而不是存储外部函数本身a。

哈士奇WWW

该代理模式可以帮助你:(function() {    // log all calls to setArray    var proxied = jQuery.fn.setArray;    jQuery.fn.setArray = function() {        console.log( this, arguments );        return proxied.apply( this, arguments );    };})();上面将其代码包装在一个隐藏“代理”变量的函数中。它将jQuery的setArray方法保存在一个闭包中并覆盖它。然后,代理会记录对方法的所有调用,并将调用委托给原始调用。使用apply(this,arguments)可以保证调用者无法注意到原始方法和代理方法之间的区别。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript