我正在尝试创建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
已定义。那么问题是什么(也许是迭代器问题?)?我是否在扩展缓冲区方面做错了什么?
答案 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()