Javascript 如何定义一个父类方法,当从子类调用该方法时,该方法定义该子类上的方法?

Javascript 如何定义一个父类方法,当从子类调用该方法时,该方法定义该子类上的方法?,javascript,coffeescript,metaprogramming,Javascript,Coffeescript,Metaprogramming,我想做如下操作,其中Parent.setupMethod将创建子类(仅)上的实例方法和类方法。这可能吗 class Parent @setupMethod: (name) -> # do whatever to setup method on calling class class Child1 extends Parent @setupMethod "someMethod" class Child2 extends Parent child1 = new Chil

我想做如下操作,其中Parent.setupMethod将创建子类(仅)上的实例方法和类方法。这可能吗

class Parent
  @setupMethod: (name) ->
    # do whatever to setup method on calling class


class Child1 extends Parent
  @setupMethod "someMethod"

class Child2 extends Parent

child1 = new Child1
child2 = new Child2

child1.someMethod # some output
child2.someMethod # undefined

看起来您希望
setupMethod
是一个Ruby风格的宏,可以向
Child1
添加方法。为此,您只需在父项setupMethod中编辑适当的原型,例如:

class Parent
  @setupMethod: (name) ->
    @::[name] = -> # whatever needs to be done goes here...
在类方法(如
Parent.setupMethod
)的上下文中,
@
将是类本身,
@::
将是相应的JavaScript原型(即
@::
@
的实例方法所在)。然后将适当的属性添加到
@::
对象,就完成了


演示:

请描述一下
某个方法将要做什么,以及为什么需要以编程方式而不是静态方式定义它?@Jon:我猜这是一个类似于Rails风格的宏,类似于过滤器之前的
有很多
。。。类方法。正确,因为我正在沿着这些思路看一些东西。如果用=>而不是->定义@setupMethod,这是有效的。否则,我会得到未定义的函数。但是我不想在每个子类的实例上定义instance方法。这可能吗?所以在小提琴中child1有方法,但是child2有错误?但是你问题中的
child2.someMethod#undefined
表明
child2
不应该得到
someMethod
,只有
child1
应该得到它。这正是小提琴中发生的事情,不是吗?如果您使用
=>
定义
setupMethod
,那么它会将该方法添加到
父级
。这就是我想要的Child1和Child2,但不需要子类中的If/else。另外,我切换回->并且看起来函数定义正确。奇怪的是,未定义的方法错误现在出现在父类上。不确定我在父对象上调用这些方法的位置,因此必须进行一点跟踪。我不明白您的意思。你能提供一个更好的例子来说明你要做什么吗?那么为什么不在基类中添加
someMethod:->
,然后在Child1中重写它呢?否则,
@superMethod'someMethod'
将更改Child2。我想你可能想彻底重新思考你在做什么,听起来你在尝试做一些相当奇怪的事情。也许你应该重新开始,陈述潜在的问题,而不是建议的解决方案。