Javascript 中的动态回调
Dynamic callback in Javascript
是否可以为封装在 function/coffeescript class 中的每个函数动态添加回调?就像 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
是否可以为封装在 function/coffeescript class 中的每个函数动态添加回调?就像 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