CoffeeScript 如何继承属性?

比如我有一个大类

class Shapes
    defaultFill   = '#9999D2'
    defaultStroke = '#2727A6'
    overFill      = '#FFF076'
    overStroke    = '#ED1818'

然后有一个继承它的类

class Dots extends Shapes
    constructor: ->
        @defaultFill = defaultFill

我发现这样写是错误的,那应该怎么去使用父类的属性呢?谢谢

阅读 3.9k
2 个回答

@huandu 的方法很好,但是解决不了题主的问题,因为基类写的有点问题。
可以看下下面这段代码编译出来的结果:

class Shapes
    defaultFill = '#9999D2'
    @defaultStroke = '#2727A6'
    overFill      : '#FFF076'
    @overStroke    : '#ED1818'

-->

Shapes = (function() {
  var defaultFill;
  function Shapes() {}
  defaultFill = '#9999D2';
  Shapes.defaultStroke = '#2727A6';
  Shapes.prototype.overFill = '#FFF076';
  Shapes.overStroke = '#ED1818';
  return Shapes;

})();

因此,题主基类中的defaultFill声明其实是在一个闭包中,无法在子类中访问到。
应该写成:

class Shapes
    @defaultFill  = '#9999D2'
class Dots extends Shapes
    constructor: ->
        @defaultFill = @constructor.defaultFill
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题