Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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中通过es7装饰器创建子类(扩展)_Javascript_Ecmascript 6_Es6 Class - Fatal编程技术网

在javascript中通过es7装饰器创建子类(扩展)

在javascript中通过es7装饰器创建子类(扩展),javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,有没有一种方法可以通过decorator动态地对es6类进行子类化 警告:以下内容无效,仅供讨论 export function dec(target) { var ParentClass = function(...args) { console.log('parent ctor') target.prototype.apply(this, args); // this probally is not right } return newParentClass; }

有没有一种方法可以通过decorator动态地对es6类进行子类化

警告:以下内容无效,仅供讨论

export function dec(target) {
  var ParentClass = function(...args) {
    console.log('parent ctor')
    target.prototype.apply(this, args); // this probally is not right
  }
  return newParentClass;
}

@dec
class TestClass {
  constructor(...args) {
    super(args);
    console.log('child ctor');
  }
}
在本例中,输出为:

> parent ctor
> child ctor
其效果与……相同

class ParentClass extends TestClass {
  constructor(...args) {
    super(args);
    console.log('parent ctor');
  }
}
这可能吗

有没有一种方法可以通过decorator动态地对es6类进行子类化

不,因为ES6中没有decorator:-但是即使这个建议在将来的语言版本中被接受,您也不会使用decorator来进行子类化。相反,只需为超类提供一个表达式:

function dynamicExample() {
  return class ParentClass {
    constructor(...args) {
      console.log('parent ctor', args);
    }
  };
}

class TestClass extends dynamicExample() {
  constructor(...args) {
    super(...args);
    console.log('child ctor');
  }
}

您是否要求返回类扩展目标{constructor…args{console.log'parent-ctor';super…args;}}?我很困惑,因为您的示例中的父级和子级的顺序似乎很奇怪。您应该只使用类TestClass ExtendedDecoratedWhatch…{装饰器不是ES7的一部分。它们仍处于建议阶段。如何通过:Object.setPrototypeOfTestClass.prototype,ParentClassAnd无性能缺陷:TestClass.prototype=Object.createParentClass.prototype;