您的位置:首页 > Web前端 > JavaScript

JS拦截方法

2016-04-21 16:24 731 查看

关于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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 拦截