JS拦截方法

来源:互联网 发布:办公软件应用教程 编辑:程序博客网 时间:2024/06/05 09:55

关于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');


0 0