javascript - 可以创建 javascript 钩子(Hook)吗?

标签 javascript

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

举个例子----

function myjsfunction(){

    call_my_function('handle_name');

}

现在,无论人们添加带有“handle”名称的函数,它都应该在那里执行。

喜欢

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

这两个函数都应该执行

最佳答案

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 中的第一类,因此您可以简单地将它们存储在对象中。

用例:

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

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

使用 IIFE 实现:

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

关于javascript - 可以创建 javascript 钩子(Hook)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45054782/

相关文章:

javascript - 错误: function undefined

isElementInViewport 的 JavaScript 测试用例

javascript - 我可以用 javascript 在 chrome 中按下 "back"按钮吗

Javascript 更改 innerHTML 函数不起作用

javascript - CYPRESS - 查找并生成包含一些文本的表行

javascript - 在线存储变量

javascript - 为什么我不断收到 undefined variable : errorEmpty and errorEmail in my script tags?

javascript - React Navigation 的 StackNavigator 标题内的自定义关闭按钮

javascript - 为什么我必须为常规 "const"变量指定类型,而不是为 "const"循环中定义的 "for"变量指定类型?

javascript - 带有 jQ​​ueryMobile-Router 的 Require.js