为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

12345678_0001 2019-09-19 10:55:44
我有一个函数,a()我想要覆盖,但也有原始a()的顺序执行,具体取决于上下文。例如,有时当我生成页面时,我想要覆盖如下:function a() {    new_code();    original_a();}有时像这样:function a() {    original_a();    other_new_code();}我如何original_a()在超越范围内获得这一点a()?它甚至可能吗?请不要以这种方式建议替代方法,我知道很多。我特意问这个问题。
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

你可以这样做:


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。


查看完整回答
反对 回复 2019-09-19
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

该代理模式可以帮助你:


(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)可以保证调用者无法注意到原始方法和代理方法之间的区别。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 293 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号