如何在 Javascript 中同时拥有静态方法和实例方法

Mih*_*anu 5 javascript php oop

我在 PHP 中有这样的设计(类似于 Eloquent ORM):

class User {
    private $id;
    private $name;

    public __constructor($id, $name) {
        $this->id = $id;
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    static function getUser($id) {
        //get data from database
        return new User($id, 'Adam');
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

$user = User::getUser(1);
Run Code Online (Sandbox Code Playgroud)

现在,我想用 Javascript 来做这件事。我到目前为止:

var User = function(id, name) {
    this.id = id;
    this.name = name;
}

User.prototype.getName = function() {
    return this.name;
}
Run Code Online (Sandbox Code Playgroud)

如何添加静态函数?

我如何调用它才能返回实例化对象?

这个设计模式有名字吗?


更新:

我的问题的简短回答是:

User.getUser = function(id) {
    //get data from database
    return new User(id, 'Adam');
}
Run Code Online (Sandbox Code Playgroud)

ssu*_*ube 4

如何添加静态函数?

使用 ES5,您将使用:

User.staticMethod = function (user, name) {
  user.name = name;
}
Run Code Online (Sandbox Code Playgroud)

我如何调用它才能返回实例化对象?

User.staticMethod = function (id, name) {
  return new User(id, name);
}
Run Code Online (Sandbox Code Playgroud)

这个设计模式有名字吗?

这是一个工厂方法

我如何使用 ES6 使其更加简洁?

有课!

class User {
  static createUser(id, name) {
    return new User(id, name);
  }

  constructor(id, name) {
    this.id = id;
    this.name = name;
  }

  get name() {
    return this.name;
  }
}
Run Code Online (Sandbox Code Playgroud)