Javascript中的动态回调

Javascript中的动态回调,javascript,coffeescript,Javascript,Coffeescript,是否可以向封装在function/coffeescript类中的每个函数动态添加回调?类似于rails中的后过滤器 例如: class Parent after_every_function_call_myCallback myCallback: -> console.log “callback called“ class Child extends Parent doSomething: -> console.log “a function“ cla

是否可以向封装在function/coffeescript类中的每个函数动态添加回调?类似于
rails
中的
后过滤器

例如:

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“
类父类
在每个函数调用我的回调之后
myCallback:->
console.log“调用回调”
类子级扩展父级
doSomething:->
console.log“一个函数”
普通班
doSomething:->
console.log“常规功能”
>reg=新的常规()
>注册剂量测定法()
<“常规函数”
>child=新的child()
>child.doSomething()
<“函数”
<“已调用回调”

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

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

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

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

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

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

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

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


不可以。你可以创建一个装饰器,手动应用于每个函数,或者你可以循环原型属性并扩展函数。但作为一项功能,这并不存在。我如何循环原型属性?我可以将它们封装起来吗?
对于k,f of Child::
进行循环,然后你可以
Child:[k]=after Parent::myCallback,f
,其中
after
是一个装饰另一个函数的高阶函数。但同样,它是手动的,至少如果你想使用Coffee classes有趣,你认为可以用另一种方式做得更好吗,比如不使用Coffee classes?谢谢你迄今为止的帮助,顺便说一句:-)不,你可以创建一个装饰r您可以手动应用于每个函数,或者您可以循环原型属性并扩展函数。但作为一项功能,这并不存在。我如何循环原型属性?我可以将它们封装起来吗?
对于k,f of Child::
进行循环,然后您可以
Child:[k]=after Parent::myCallback,f
,其中
after
是一个装饰另一个函数的高阶函数。但同样,它是手动的,至少如果你想使用Coffee classes有趣,你认为可以用另一种方式做得更好吗,比如不使用Coffee classes?谢谢你迄今为止的帮助,顺便说一句:-)不,你可以创建一个装饰r您可以手动应用于每个函数,或者您可以循环原型属性并扩展函数。但作为一项功能,这并不存在。我如何循环原型属性?我可以将它们封装起来吗?
对于k,f of Child::
进行循环,然后您可以
Child:[k]=after Parent::myCallback,f
,其中
after
是一个装饰另一个函数的高阶函数。但同样,它是手动的,至少如果你想使用Coffee classes有趣,你认为可以用另一种方式做得更好吗,比如不使用Coffee classes?谢谢你迄今为止的帮助,顺便说一句:-)不,你可以创建一个装饰r您可以手动应用于每个函数,或者您可以循环原型属性并扩展函数。但作为一项功能,这并不存在。我如何循环原型属性?我可以将它们封装起来吗?
对于k,f of Child::
进行循环,然后您可以
Child:[k]=after Parent::myCallback,f
,其中
after
是一个高阶函数,用于装饰另一个函数。但同样,它是手动的,至少如果您想使用Coffee classes有趣,您认为可以用另一种方式做得更好吗,比如不使用Coffee classes?谢谢您迄今为止的帮助顺便说一下:-)