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

ubu*_*god 1 javascript ecmascript-6 es6-class

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

\n\n

我尝试了以下方法:

\n\n

\r\n
\r\n
class Person {\r\n  constructor(...props) {\r\n    let {name, age} = props;\r\n    this.name = name;\r\n    this.age = age;\r\n  }\r\n  static create(...props) {\r\n    return new Person(props);\r\n  }\r\n  \r\n  display() {\r\n    console.log(this)\r\n  }\r\n}\r\n\r\nPerson.create({name: \'John\', age: 28}).display(); //Simple object input
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

但这不会起作用,因为简单的对象输入给出:

\n\n
Person\xc2\xa0{name: undefined, age: undefined}\n
Run Code Online (Sandbox Code Playgroud)\n\n

任何帮助,将不胜感激。

\n\n

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

\n\n

\r\n
\r\n
Person\xc2\xa0{name: undefined, age: undefined}\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

app*_*ple 5

没那么复杂,对象是一个参数,所以只需传递它即可。

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();
Run Code Online (Sandbox Code Playgroud)

  • `constructor({ 姓名, 年龄 }) { this.name = 姓名; this.age = 年龄;}` 也有效。 (5认同)