首页 教程 API文档

函数劫持

2015-09-23 12:55:31

属性


使用频率
所属模块 Std.hooker
成员类型 静态成员函数

描述


Std.hooker.hijack是一个函数劫持的方法,该函数可以改变一个函数的本身,让函数执行一些附加的代码,或者是改变这个函数本来的参数值.

给函数增加的代码中,如果拥有返回值,那么这个返回值将会作为这个函数本身的返回值.

如果使用Std.hooker.hijack时候是使用的2个参数,会返回新的函数,如果使用的3个参数,那么那个函数的本身将会被改变,通常情况下建议使用第二种方法.

语法



Function Std.hooker.hijack(Function realFunc,Function addonFunc);
Function Std.hooker.hijack((Object,Function) target,String methodName,Function addonFunc);
        

参数


名称 类型 描述
realFunc Function 需要劫持的函数本身
addonFunc Function 附加代码的函数,该函数包含一个实参,这个实参是一个包含realFunc参数的数组,如果数组中的值被改变,那么realFunc的参数值也会随之改变.
target Function,Object 目标模块对象,如果指定了该参数,那么将会直接替换该对象下面指定名称的函数
methodName String 目标模块下的函数名称,该函数将会被劫持替换

返回值


被劫持后的新函数

相关例子


例子1


//劫持alert函数
Std.hooker.hijack(window,"alert",function(args){
    console.log("alert: " + args[0]);
});
//当执行alert时候,会先在控制台输出其文本内容
alert("simple text");
        

例子2


var data = {
    func1:function(){
        console.log("hello");
    }
};
Std.hooker.hijack(data,"func1",function(){
    console.log("func1 has been hijacked!");
    return true;
});

//当执行data.func1的时候将会输出 "func1 has been hijacked!" 然后输出 "hello",返回值为true
data.func1();