是否可以像在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')});
这两个函数都应该执行
答案 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实施: