【问题标题】:ES6 classes, member properties definitions as static/sharedES6 类,成员属性定义为静态/共享
【发布时间】:2015-05-26 21:49:51
【问题描述】:

我正在使用 io.js 2.xx 测试 ES 6 中的类 下面的例子我取自 Mozilla, 事情进展顺利(JS 中的 OOp), 至少我们现在有直接继承(在语法级别) “扩展”指令... 我提出的问题是成员属性是在构造函数中定义的 这至少是一个语法问题...... (通过网络搜索,发现很少有这方面的信息) 当 ESxx 尝试对属性成员进行可见性指令时(我猜在不久的将来),这将是一个更大的问题

不管怎样,现在... 如何声明共享/静态属性?

// example from Mozilla
class Polygon 
  {
  constructor(height, width) 
    {
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
    }
  }

class Square extends Polygon 
  {
  constructor(length) 
    {
    super(length, length);
    this.name = 'Square';
    }
  }

【问题讨论】:

标签: class static-members ecmascript-6 ecmascript-harmony


【解决方案1】:

您仍然可以只使用旧语法将属性添加到构造函数(静态属性)或原型(预定义实例属性)

class Foo {
  constructor() {

  }
}
Foo.bar = 'bar';
Foo.prototype.baz = 'baz';

console.log(Foo.bar) // 'bar'
console.log(new Foo().baz) // 'baz'

它会起作用的。看example on babel-repl

【讨论】:

  • 很好...但是在这种演变中有趣的是抓住最佳实践 os OOP...例如逻辑语法...封装...也许在未来的泛型、运算符重载等.
  • 您可以使用实验性 babel 功能 - es7.classProperties。这是modified version of example。但请注意,它不会很快原生实现
【解决方案2】:

您可以使用 getters 定义静态或原型属性:

class Foo {
  static get bar() {
    return 42;
  }

  get bar() {
    return 21;
  }
}

这并不理想,但它有效。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2018-05-31
    • 2013-07-27
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多