使用Coffeescript覆盖Javascript函数

时间:2015-07-06 19:16:03

标签: javascript coffeescript

我使用的库具有如下定义的类:

RoundDown = function () {
    this.prop = 5.5
    this.do_something = function() {
        return "base class: " + this.prop
    };
};

使用CoffeeScript,我想扩展do_something,以便它运行原始函数和新代码。对它进行子类化似乎是一个干净的解决方案,但基类'函数被调用,而不是被覆盖的函数。

# Subclass overriding round function
class RoundUp extends RoundDown
    do_something: () ->
        return super() + " Subclass code"

jsFiddle here

正确的做法是什么?谢谢!

2 个答案:

答案 0 :(得分:2)

问题是RoundDown正在设置实例的字段,而不是原型的字段。解决这个问题的理想方法是

RoundDown = function () {
    this.prop = 5.5
};
RoundDown.prototype.do_something = function() {
    return "base class: " + this.prop
};

但也许您没有权限修改RoundDown,例如它在库中,所以这样做

class RoundUp extends RoundDown
  constructor: ->
    super()
    oldDoSomething = @do_something 
    @do_something = ->
      oldDoSomething.call(this) + " Subclass code"

答案 1 :(得分:0)

使用js2coffee转换器:js2.coffee

RoundDown = ->
  @prop = 5.5

  @do_something = ->
    'base class: ' + @prop