可以创建javascript钩子吗?

时间:2017-07-12 10:12:34

标签: javascript

是否可以像在php中一样在javascript中创建一个钩子系统?

举个例子----

function myjsfunction(){

    call_my_function('handle_name');

}

现在无论人们使用“句柄”名称添加什么功能,都应该在那里执行。

喜欢

add_to_function('handle_name', function(){alert('hi')});
add_to_function('handle_name', function(){alert('hello')});

这两个函数都应该执行

1 个答案:

答案 0 :(得分:3)

var hooks = {};

function add_to_function(name, func) {
  if(!hooks[name]) hooks[name] = [];
  hooks[name].push(func);
}

function call_my_function(name, ...params){
  if(hooks[name]) 
     hooks[name].forEach(func => func(...params));
}

由于函数是js中的第一类,您只需将它们存储在对象中即可。

USECASE:

add_to_function("log", console.log.bind(console, "this will log "));

call_my_function("log", "sth cool!");

使用IIFE实施:

http://jsbin.com/joxigabeyi/edit?console