首頁  >  問答  >  主體

javascript - CoffeeScript 如何继承属性?

比如我有一个大类

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

然后有一个继承它的类

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

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

天蓬老师天蓬老师2749 天前340

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-10 14:47:26

    @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
    

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:47:26

    this.constructor.defaultFill
    

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

    回覆
    0
  • 取消回覆