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)
以及如何实现我的目标?
我不太确定我理解你的需求,但看起来像这样简单的事情应该适合你的需求:
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)
工作得很好。