javascript - 如何在 ES6 中实现命名构造函数

标签 javascript ecmascript-6 es6-class

我正在尝试在 ES6 中实现命名构造函数用法。这样做的原因是我认为避免使用 new 关键字调用构造函数会更令人愉快,而是使用该类的简单方法来利用其他方法。我想到为此使用一个静态函数作为构造函数的 Proxy

我尝试了以下方法:

class Person {
  constructor(...props) {
    let {name, age} = props;
    this.name = name;
    this.age = age;
  }
  static create(...props) {
    return new Person(props);
  }
  
  display() {
    console.log(this)
  }
}

Person.create({name: 'John', age: 28}).display(); //Simple object input

但这不会像简单的对象输入那样工作:

Person {name: undefined, age: undefined}

如有任何帮助,我们将不胜感激。

更新:谢谢,@appleapple 的回答帮了大忙。我没有注意到我传递了一个论点。对于那些想知道如何为 n-Ary 构造函数方法完成此操作的人(当然使用对象很整洁,但仍然如此),这里有一个示例:

class Person {
  constructor([name, age ]) {
    this.name = name;
    this.age = age;
  }
  static create(...props) {
    return new Person(props); //return new this(props); also works
  }
  
  display() {
    console.log(this)
  }
}

Person.create('John', 28).display();

最佳答案

没那么复杂,object 是一个单独的参数,所以只需传递它即可。

class Person {
  constructor(props) { // <-------
    let {name, age} = props;
    this.name = name;
    this.age = age;
  }
  static create(props) { // <-------
    return new Person(props); 
  }

  display() {
    console.log(this)
  }
}

Person.create({name: 'John', age: 28}).display();

关于javascript - 如何在 ES6 中实现命名构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55841574/

相关文章:

javascript - 如何将 redux 与 fela 一起使用并使用react?

javascript - 如何从 JavaScript 上的 Rails 访问环境变量?

javascript - 在工具提示格式化程序中创建图表

javascript - 在 ES6 (React) 中传递参数,SyntaxError : unknown: Unexpected token

javascript - 如果我不将上下文参数传递给 React 中的 super 键会怎样?

javascript - PHP 日期和时区

javascript - 如何在样式中使用同级选择器 css

javascript - 如果没有 "function"关键字,这个对象方法定义如何工作?

javascript - ES6 类扩展了 Socket IO

Javascript ES6 类组成