【发布时间】:2017-07-03 14:15:28
【问题描述】:
看下面的例子:
class Parent {
constructor({ parentOnlyArg = 'default value' } = {}) {
this.parentOnlyArg = parentOnlyArg;
}
}
class Child extends Parent {
// this class and also any class inheriting from it
constructor({ visibleStyle = 'inline' } = {}) {
// I want to pass argument to super as an object
super(/** args **/);
this.visibleStyle = visibleStyle;
}
}
class Child2 extends Parent {
// Specifying parentOnlyArg as default will change the behaviour
constructor({ parentOnlyArg = 'another parent value',
someOther = 'value' } = {}) {
// I want to pass argument to super as an object
super(/** args **/);
this.someOther = someOther;
}
}
是否可以将构造函数参数传递给super?
好像比我想象的要简单
super(...arguments);
然后我可以创建Child 使用
var c1 = new Child(); // c.parentOnlyArg = 'default value'
var c2 = new Child2(); // c.parentOnlyArg = 'another parent value'
var c3 = new Child({ parentOnlyArg: 'changed again' }); // c.parentOnlyArg = 'changed again'
【问题讨论】:
-
为什么不使用
<>sn-p 编辑器发布minimal reproducible example? -
super({parentOnlyArg})? -
有什么理由不将解构移动到函数体中?然后,您将获得对要传递的变量的引用。
-
@loganfsmyth 所以你的意思是我应该在
super之前销毁?比如let { parentOnlyArg='value', visibleStyle='inline'} = args然后super(args)?我不知道是否设置了任何对象成员。我将如何处理?Object.assign有默认值吗? -
@bergi 我可以这样做,但是我希望类只使用它感兴趣的参数。在所有情况下,参数都会映射到类成员或忽略它。
标签: javascript class ecmascript-6 es6-class