JS拦截方法

关于JS拦截方法

在网上找了好久关于JS拦截方法的文章,没有什么发现,仔细研究后整理如下代码,还望大家多多指正。
其实最主要的就是 
Object.getOwnPropertyNames(example).forEach(function (property)
这段代码,遍历对象内部的所有方法,判断如果是方法并且等于方法名,则进行拦截,这里我拦截的window全局所有方法,但是感觉不太好,不知可否有大神指点如何只拦截全局自定义的方法,过滤掉window对象内自身的方法。
original.apply(example, Array.prototype.slice.call(arguments));
这段代码的意思是将原有方法再添加回去,如果去掉将不执行原有方法内代码,执行拦截传递的方法代码

<span style="font-family: Arial, Helvetica, sans-serif;">intercept(window,"hello",fn);</span>
function intercept(example,funName,fun){  //example 遍历对象,funName需要拦截的方法名 ,fun拦截后执行的方法
    Object.getOwnPropertyNames(example).forEach(function (property) {
        var original = example[property];
        if (typeof original === "function"&&original.name == funName) {
            example[property] = function () {
                if(fun){
                    fun(property);
                }else{
                    return false;
                }
                original.apply(example, Array.prototype.slice.call(arguments));
            }
        }
    });
}
function fn(property){
    console.log('Intercepted call to function:', property);
}
function hello(varstr){
    console.log('varstr=',varstr);
}
hello('test');


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值