类属性作为ES6中的语句

时间:2018-01-16 13:33:07

标签: javascript es6-class

在下面的代码中,将类属性编写为语句(3条注释行)的目的是什么?是属性初始化吗?

 export default class Player extends Camera {
   constructor(opts = {}) {
    super(opts);
    if(opts.target)
      this.setTarget(opts.target);
    this.movie;          // 1
    this.currentFrame;   // 2
    this.displayer;      // 3
    ...

Original Source

1 个答案:

答案 0 :(得分:5)

它们在代码本身方面没有做任何事情,假设它们没有被定义为getter(它们不在你引用的代码中)。 (如果他们是吸毒者并且因为他们的副作用而被召唤,那么在多个级别上的编码很差...... :-))

但IDE有时根据构造函数中this引用的属性推断构造函数或类创建的对象上可用的属性,因此作者可能已经这样做以改进IDE的自动建议功能编辑。例如,他们执行const p = new Player()并且IDE在构造函数代码中知道在他/她键入movie时提供currentFramedisplayerp.。 (更好的选择是将它们设置为某个适当的初始值,即使undefined;该代码也不会创建实际对象上的属性。)

或者,作者对JavaScript缺乏经验,并认为他/她必须以某种方式“声明”这些属性,发现做你所展示的内容不会导致错误,因此认为它是正确的。