3

在 CoffeeScript 中,我希望能够将超级方法分配给变量而不调用它。

class a
  one: ->

class b extends a
  one: ->
    mySuper = super

但是,执行以下操作实际上会调用超级方法而不是返回它 - 这是编译后的代码:

return mySuper = b.__super__.one.apply(this, arguments);

我如何实际将超级方法分配给变量而不是调用它?

我知道我可以这样做:

class b extends a
  one: ->
    mySuper = b.__super__.one

但它不是那么干净。

4

1 回答 1

4

Coffee 脚本没有为此用例提供语法糖。所以自己做吧。

我会这样做:

class B extends A
  one: ->
    mySuper = A::one
    mySuper.call this # calls the saved super method

例子

::是 的简写prototype。所以A::one编译到A.prototype.one哪个是你的超级方法实际所在的位置。


但这对我来说似乎是一个危险信号。我想不出这是一个好主意的情况。我敢打赌它不是语言的一部分,因为如果你正确设计你的课程,你就不应该需要它。你说你想要一些干净的东西,但是你想要在这里做的事情我根本不会考虑干净。

于 2013-07-25T00:12:55.717 回答