如何在ES6中使用类扩展对象?

cma*_*mal 6 javascript ecmascript-6

我正在尝试清理我的ES6类定义,我现在有这种代码:

class SomeClass {
  constructor({a, b, c, d, e}) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    // some codes here
  }
  // some methods here..
}
Run Code Online (Sandbox Code Playgroud)

此代码将传递给构造函数的所有内容扩展。

我以这种方式使用它:

var obj = new SomeClass({a:1, b:2, c:3, d:4, e:5});
Run Code Online (Sandbox Code Playgroud)

当我想更改传递给构造函数的参数时,例如:

var obj = new SomeClass({a:1, b:2, c:3, d:4, e:5, f:6});
Run Code Online (Sandbox Code Playgroud)

我想obj.f成为6

如果要向其传递不同的参数,我希望构造函数可重用。如果传递给构造函数的参数发生更改,则返回值也会更改。

我尝试了这个:

class SomeClass extends Object {
  constructor(params) {
    super(params);
    // some codes here
  }
  // some methods here..
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

那么为什么这不起作用?如果我扩展Object课程,为什么super({a:1})不返回{a:1}

$ node
> new Object({a:1})
{ a: 1 }
> class MyClass extends Object {
... constructor(params) { super(params); }
... }
undefined
> new MyClass({a:1})
MyClass {}
Run Code Online (Sandbox Code Playgroud)

以及如何实现我的目标?

Mar*_*ius 5

我不太确定我理解你的需求,但看起来像这样简单的事情应该适合你的需求:

class SomeClass {
  constructor(obj) {
    Object.assign(this, obj);
    // some codes here
  }
  // some methods here..
}
Run Code Online (Sandbox Code Playgroud)

那样

var obj = new SomeClass({a:1, b:2, c:3, d:4, e:5, f:6});
Run Code Online (Sandbox Code Playgroud)

工作得很好。