2017-07-12 31 views
0

是否有可能在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')}); 

这两个功能应该执行

+0

所以,你正在寻找JS **和** PHP的答案吗? – Justinas

+0

js anwer其实 – Alice

回答

1
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

+0

WOW !!!现在就去尝试,但是可以避免'var hooks'用户定义的变量吗?意味着像dom或其他任何东西一样的全局...所以它不会依赖于该用户变量的初始化 – Alice

+0

@Alice可能会将它包装成一个IIFE ... –

+0

IIFE?我真的不知道这一点:( – Alice