Javascript 中的动态回调

Dynamic callback in Javascript

本文关键字:回调 动态 Javascript      更新时间:2023-09-26

是否可以为函数/coffeescript 类中封装的每个函数动态添加回调?就像rails中的after_filter.

例如:

class Parent
  after_every_function_call_myCallback
  myCallback: ->
    console.log “callback called“
class Child extends Parent
  doSomething: ->
    console.log “a function“
class Regular 
  doSomething: ->
    console.log “a regular function“
> reg = new Regular()
> reg.doSomething()
< “a regular function“
> child = new Child()
> child.doSomething()
< “a function“
< “callback called“

作为一个功能,这并不存在,但您可以创建一个装饰器,手动应用于原型中的每个函数:

after = (g, f) ->
  ->
    f()
    g()
class Parent
  myCallback: ->
    console.log 'callback called'
class Child extends Parent
  doSomething: ->
    console.log 'a function'
for k, f of Child::
  Child::[k] = after Parent::myCallback, f
child = new Child
child.doSomething()
# a function
# callback called

通过一些抽象,您可以将其重用于其他类,但仍然有点手动:

decorate = (decor, f, clazz) ->
  for k, g of clazz::
    clazz::[k] = decor f, g
  clazz
class Child extends Parent
  doSomething: ->
    console.log 'a function'
decorate after, Parent::myCallback, Child