Nai*_*per 0 javascript constructor class
这个问题是相同的:[ 如何在Java中从另一个调用一个构造函数?,但使用JavaScript。
我读到JavaScript在一个类中不支持构造函数的多个声明,这是真的吗?
那么,我可以实现以下代码吗?
class A {
constructor(a,b){
console.log([a,b]);
}
constructor(obj) {
console.log(obj.a,obj.b);
}
}
let x1 = new A(2,4);
let x2 = new A({a:2,b:4});
Run Code Online (Sandbox Code Playgroud)
回到最初的问题:
class A {
constructor(a,b){
console.log(a+b);
}
constructor(obj) {
this(obj.a,obj.b);
}
}
let x1 = new A(2,4);
let x2 = new A({a:2,b:4});
Run Code Online (Sandbox Code Playgroud)
如果没有,那么最“透明”的设计模式是什么?
JavaScript不支持任何类型的重载,因为函数签名和函数调用不必匹配。另一方面,函数签名和函数调用不必匹配:
class A {
constructor(a, b) {
if (b === undefined) {
({a, b} = a);
}
console.log(a + b);
}
}
new A(1, 2);
new A({a: 3, b: 4});Run Code Online (Sandbox Code Playgroud)
但是,这可能会使您感到困惑,因此,请考虑是否最好的设计是不这样做,方法是消除一个不必要的重载,或者将其拆分为另一个函数:
class A {
constructor({a, b}) {
console.log(a + b);
}
static of(a, b) {
return new this({a, b});
}
}
A.of(1, 2);
new A({a: 3, b: 4});Run Code Online (Sandbox Code Playgroud)