如何扩展模块的类?

时间:2019-02-11 21:22:12

标签: node.js

我正在使用带有node --experimental-modules的现代Javascript(EC6 +)代码。

import bigInt from 'big-integer';  // npm i big-integer

console.log(bigInt(333).toString(2)) // fine

class bigIntB4 extends bigInt {
    constructor(...args) {
       super(...args);
    }
    test() {
       console.log("Hello!")
    }
}

let c = new bigIntB4(333)  //fine
console.log(c.toString(2)) // fine
c.test()   // BUG!

错误:“ TypeError:c.test不是函数”

1 个答案:

答案 0 :(得分:1)

bigInt is not a constructor function.是返回对象的普通函数。因此,您无法真正扩展它。

这是问题的简化示例:

function Foo() {
  return {foo: 42};
}

class Bar extends Foo {
  constructor() {
    super();
  }
}

console.log(new Bar instanceof Bar);
console.log(new Bar);

new Bar返回的值是Foo返回的值,不扩展Bar.prototype


如果只需要添加新方法at least,则可以修改原型:

bigInt.prototype.test = function () {
  console.log("Hello!");
};