创建NodeJS Buffer的子类

时间:2017-07-04 15:24:46

标签: node.js buffer

我正在尝试创建NodeJS缓冲区的子类。我尝试了以下方法:

const SubClass = Object.create(Buffer)
SubClass.prototype.isZero = function () { 
    for(const value of this.buffer) { // Fails on this line 
        ...
    }
}

然后我做以下

SubClass.from([0, 0]).isZero()

它抛出

TypeError: undefined is not a function

this.buffer已定义。那么问题是什么(也许是迭代器问题?)?我是否在扩展缓冲区方面做错了什么?

1 个答案:

答案 0 :(得分:1)

缓冲区不是一个可以延伸的课程 - 阅读您遇到问题的模块功能是值得的:

https://github.com/nodejs/node/blob/master/lib/buffer.js#L172

扩展Buffer类将复制初始化Buffer的新实例而不是新的SubClass的所有方法。因此,您无法为定义的行为扩展缓冲区类。或者,您可以使用类来包装它以创建类似的界面。

class MyBuffer {
  constructor(arg) {
    this.buffer = Buffer.from(arg)
  }

  static from(arg) {
    return new MyBuffer(arg);
  }

  isZero() {
    for(const value of this.buffer) { 
      // Fails on this line 
      console.log(value)
    }
  }
}

然后使用您首选的语法:

MyBuffer.from([0, 0]).isZero()