Javascript - 静态和实例方法的相同名称是不好的做法?

时间:2017-11-22 20:08:33

标签: javascript class

在Javascript中,给静态方法和实例方法赋予相同的名称是不好的做法?

假设我有一个表示数据库表(Model)的类,我想提供2个用于获取某些值的选项:(1)带有id,(2)通过实例:

class Foo extends Model {

  static getById(id) {
    return Foo.query().findById(id);
  }

  static getBars(id, limit, offset) {
    return Foo.getById(id).then(foo => foo.getBars(limit, offset));
  }

  getBars(limit, offset) {
    return this.$relatedQuery('bars').range(limit, offset);
  }

}

此示例使用Objection JS。

因此,如果您已经有一个名为Foo的{​​{1}}实例,则只需拨打foo,而不是foo.getBars(10, 0)

1 个答案:

答案 0 :(得分:2)

当它为您简化事物(或相当大的缩短您的代码或其他东西)时,这很好,但当然这会让您难以评估使用这两种方法中的哪一种。另外,如果我想从id获取baz 一个qux怎么办?如果我使用静态方法,则需要两次进入数据库。因此我宁愿建议使用

class Foo extends Model {
  … // constructor
  static fromId(id) {
    return new this({bar: execute(`select bar from foo where id = ${id}`)});
  }
  getBaz() {
    return getBazFromBar(this.bar);
  }
}

这样您就可以Foo.fromId(…).getBaz()代替Foo.getBaz(id)