CoffeeScript 如何继承属性?


比如我有一个大类


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

然后有一个继承它的类


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

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

coffeescript JavaScript

chunyi 9 years, 7 months ago

 this.constructor.defaultFill

参考: http://coffeescript.org/#classes

狂战拯救世界 answered 9 years, 7 months ago

@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

迪迪飞鸿工作室 answered 9 years, 7 months ago

Your Answer