如何在JavaScript中从另一个调用一个构造函数?

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)

如果没有,那么最“透明”的设计模式是什么?

Ry-*_*Ry- 5

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)