为了尝试向nodejs的Buffer类添加队列类型功能,我构建了以下函数:
Buffer.prototype.popleft = function(n) {
tRet = this.slice(0,n);
this = this.slice(n,this.length-1); // error here
return tRet;
};
但是,此代码会产生以下错误: “ReferenceError:赋值中的左侧无效”
我知道问题在于在函数中赋值'this',我不知道更好的方法是完成这种类型的逻辑。
编辑:
结束在Buffer周围写一个对象,如下所示:
sPort.vBuffer = {}
sPort.vBuffer.buff = new Buffer(0);
sPort.vBuffer.off = 0;
sPort.vBuffer.expect = -1;
sPort.vBuffer.ReadChr = function() {
this.off ++;
return this.buff[this.off - 1];
};
sPort.vBuffer.ReadUInt32LE = function() {
this.off += 4;
return this.buff.readUInt32LE(this.off - 4);
}
sPort.vBuffer.ReadInt32LE = function() {
this.off += 4;
return this.buff.readInt32LE(this.off - 4);
}
sPort.vBuffer.Write = function(aData) {
this.buff = Buffer.concat([this.buff.slice(this.off),aData])
this.off = 0;
};
答案 0 :(得分:4)
您无法分配到this
。您可以指定它的副本,但在您的情况下,它看起来不会有任何好处。
根据Node文档,无法调整缓冲区实例的大小。现在,无论是因为Node没有提供API来做到这一点,还是因为一些内部实现假设/依赖性,我不知道。肯定看起来没有任何方法可以改变Buffer实例的长度。
你可以使用.copy
来移动内容,然后使用一些虚拟值填充最后一个位置(我猜是null
或undefined
)。