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

时间:2016-02-11 15:31:07

标签: 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');
    }
}

我这样用:

$user = User::getUser(1);

现在,我想在Javascript中执行此操作。我到目前为止:

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

User.prototype.getName = function() {
    return this.name;
}

如何添加静态功能?

如何调用它以便返回实例化对象?

此设计模式是否有名称?

更新:

我的问题的简短回答是:

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

1 个答案:

答案 0 :(得分:4)

  

如何添加静态功能?

使用ES5,您可以使用:

User.staticMethod = function (user, name) {
  user.name = name;
}
  

如何调用它以便返回实例化对象?

User.staticMethod = function (id, name) {
  return new User(id, name);
}
  

此设计模式是否有名称?

这是factory method

  

如何使用ES6使其更简洁?

With classes!

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;
  }
}