首页 教程 API文档

钩子模块

2015-10-09 10:32:35

属性


依赖模型 hooker
复杂程度
使用频率 中低
成员类型 静态模块

描述


Std.hooker模块用于钩子任务,该模块使用了hooker模型,如果一个模块被设计为拥有可被hook的功能,那么该模块中的特定功能可以随时因为外部的情况而进行改变而不需要修改其本身的任何代码.

成员列表


方法名称 成员类型 描述
::hijack static 函数劫持
act public 触发钩子
hook public 添加钩子
unhook public 移除钩子

语法



new Std.hooker();
new Std.hooker(Object hooks);
        

参数


名称 类型 描述
hooks Object 需要添加的钩子名称与钩子函数对应的Object对象

相关例子



//设计一个拥有钩子功能的模块
var module1 = Std.module({
    public:{
        put:function(number){
            //触发put钩子
            if(!this.hooker.act("put",number)){
                return;
            }
            Std.ajax.post("/action.php",{
                number:number
            });
        },
        print:function(text){
            //触发print钩子
            if(!this.hooker.act("print",text)){
                return;
            }
            console.log(text);
        }
    },
    main:function(){
        this.hooker = new Std.hooker();
    }
});

var instance1 = new module1();
//添加put钩子,如果金额小于500,put函数将不会往下执行
instance1.hooker.hook("put",function(number){
    if(number < 500){
        return false;
    }
});

//添加text钩子,如果输出的文本内容带有 "fuck",便停止执行,并且输出 "this message has been blocked!"
instance1.hooker.hook("print",function(text){
    if(text.has("fuck")){
        console.log("this message has been blocked!")
        return false;
    }
});

//执行put方法,金额大于500,向/action.php发送了提交请求
instance1.put(600);

//执行put方法,金额小于500,那么什么也不做
instance1.put(499);

//执行print方法,输出 "hello,how are you"
instance1.print("hello,how are you");

//执行print方法,带有 "fuck" 关键字,输出 "this message has been blocked!"
instance1.print("fuck your fat ass");