我使用的库具有如下定义的类:
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"
正确的做法是什么?谢谢!
答案 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