首页 教程 API文档

触发钩子

2015-10-09 10:33:52

属性


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

描述


act方法用于触发指定名称的钩子,如果没有使用hook方法添加该名称的钩子,那么会返回true,如果钩子函数返回了false那么该方法会返回false

该方法一般都在设计一个功能时候使用,在功能中的关键代码位置使用act方法来执行钩子.

提示: 如果在没有添加钩子函数的情况下,act方法的执行几乎不会有多余的性能开销.

语法



Boolean act(String name);
        

参数


类型 描述
String 钩子的名称

返回值


Boolean值,默认返回true,除非钩子函数返回了false

相关例子



//设计一个拥有钩子功能的模块
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("i want fuck your fat ass");