是否可以在JavaScript中扩展类方法?

时间:2018-07-24 17:07:21

标签: node.js ecmascript-6

假设我有一个使用以下方法的类A

  foo(x, options) {
    const limit = options && options.limit ? options.limit : undefined;
    const select = options && options.select ? options.select : {};
    const paginate = options && options.paginate ? options.paginate : {};
    const sort = options && options.sort ? options.sort : {};
    const count = options && options.count;

    const args = deepMerge({ x }, paginate);

    return count ? this.model.find(args).count()
      : this.model.find(args).limit(limit).select(select).sort(sort);
  }

然后,我创建一个扩展B的类A。我有一个方法bar与方法foo几乎相同。

是否可以将方法bar扩展为具有限制,选择,分页,排序和计数?我不想覆盖foo类中的B方法,因此我需要它使用不同的名称

1 个答案:

答案 0 :(得分:1)

如果尚未覆盖this.foo()上的foo()方法,则可以使用B,否则,可以使用引用父类的super关键字实例super.foo(),并且在两种情况下(无论是否覆盖)均有效。

class B extends A {
    bar(){
      super.foo();
    }
}
  

免责声明:我假设:按类,您的意思是ES6类而不是ES5之前的原型。

工作示例:

class A {
  foo() {
    return 'value of A';
  }
}

class B extends A {
  // case you override the method
  // super.foo() still points to the 
  // original A.foo() but you don't
  // have to do this, it's just an
  // example
  foo() {
    return 'value of B';
  }
  
  bar() {
    const valueOfA = super.foo();
    
    return valueOfA;
  }
}

const b = new B();

console.log(b.bar())