CoffeeScript 如何继承属性?

发布于 2022-08-30 00:46:23 字数 342 浏览 12 评论 0

比如我有一个大类

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

然后有一个继承它的类

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

欢你一世 2022-09-06 00:46:24

@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
假装不在乎 2022-09-06 00:46:24
this.constructor.defaultFill

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文