Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类属性:访问父构造函数中的子类属性_Javascript_Ecmascript Next - Fatal编程技术网

Javascript 类属性:访问父构造函数中的子类属性

Javascript 类属性:访问父构造函数中的子类属性,javascript,ecmascript-next,Javascript,Ecmascript Next,我想构建一个ES6类,它可以在构造函数级别读取它的子属性。换句话说,我希望通过以下规范: class Collection { model = 'model'; constructor() { // I JUST DO A SIMPLE ASSIGNMENT HERE // BUT IN THE FINAL VERSION I WOULD // LIKE TO DO SOME MORE ADVANCED // CALCULATIONS HERE

我想构建一个ES6类,它可以在构造函数级别读取它的子属性。换句话说,我希望通过以下规范:

class Collection {
  model = 'model';

  constructor() {
    // I JUST DO A SIMPLE ASSIGNMENT HERE
    // BUT IN THE FINAL VERSION I WOULD
    // LIKE TO DO SOME MORE ADVANCED
    // CALCULATIONS HERE
    this.modelCopy = this.model;
  }

  getModel() {
    return this.model;
  }
}

class MyCollection extends Collection {
  model = 'myModel';
}

it('this is passing', () => {
  expect(new Collection().getModel()).toBe('model');
  expect(new MyCollection().getModel()).toBe('myModel');
});

it('this is NOT passing', () => {
  expect(new Collection().modelCopy).toBe('model');
  // this fails because new MyCollection().modelCopy === 'model'
  expect(new MyCollection().modelCopy).toBe('myModel');
});

类属性不是本机处理的。到目前为止,他们已经被巴贝尔的改变了

如果这个插件在调用
constructor()
后将类属性转换为值并初始化,那么对此您无能为力

我在他们的github中看到cleary声明了这种方法:

对。在调用
super()
之前不能执行此操作,因为这是super的返回值。以前,它不存在,因此无法定义类字段


[UPD]规范就在这里:但我没有找到关于是否建议在本机实现中采用这种方法的信息。

您能否澄清当前的行为和预期的行为?这些断言是前者吗?那么后者是什么呢无效JS@NurbolAlpysbayev当前行为是
newmyCollection().modelCopy
返回
'model'
。而我想得到
myModel
@skyboyer的回答似乎清楚地解释了这个问题。我无法用类属性实现我想要的。我需要考虑不同的构造。如果你使用类属性,那么你就不使用ES6。