我的新博客:http://gengliming.com
什么是钩子?
引用2:当定义好的事件(比如用户登录)触发时,钩子可以使自定义代码得以执行。
引用4:钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。
引用4的解释很符合我的理解,因为最初接触钩子概念还是在大学中玩MFC时了解的。
实例
$('.btn_view').click(...)
在这种情况下,btn_view是js用来监听或者操作DOM的钩子。
钩子的实现
这是一个被简化的钩子工具。所有代码被绝对信任,不存在参数说明,没有优先级(除了插入顺序),并且钩子不保证能够运行。
// 参考了引用3,有部分修改
<script>
var Hook = {
hooks: {},
register: function( name, callback ) {
if( 'undefined' == typeof( Hook.hooks[name] )) {
Hook.hooks[name] = [];
}
Hook.hooks[name].push( callback );
},
run: function( name, arguments ) {
var i = 0;
if( 'undefined' != typeof( Hook.hooks[name] )) {
for( ; typeof(Hook.hooks[name][i]) != 'undefined'; i++ ) {
if( Hook.hooks[name][i]( arguments ) != true ) { break;}
}
}
}
};
Hook.register('quit', function( args ) {
console.log( 'Bye!-1' );
return true;
});
Hook.register('quit', function( args ) {
console.log( 'Bye!-2' );
return true;
});
Hook.register('quit', function( args ) {
console.log( 'Bye!-3' );
return true;
});
Hook.run('quit', ['All Done'] );
</script>
参考
1.Best practice on naming JavaScript hooks in your views:如何命名钩子(),主要参考价值是事件绑定
2.Manual:Hooks:php钩子系统
3.A Simple JavaScript Hooks System:钩子的简单实现
4.系统钩子:什么是系统钩子
5.javascript 钩子机制——开会得出的结论:是从实践中得出的经验
6.浅谈 javascript 函数劫持