Javascript转让中的左侧无效

时间:2014-01-31 23:59:36

标签: javascript node.js this

为了尝试向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;
};

1 个答案:

答案 0 :(得分:4)

您无法分配到this。您可以指定它的副本,但在您的情况下,它看起来不会有任何好处。

根据Node文档,无法调整缓冲区实例的大小。现在,无论是因为Node没有提供API来做到这一点,还是因为一些内部实现假设/依赖性,我不知道。肯定看起来没有任何方法可以改变Buffer实例的长度。

你可以使用.copy来移动内容,然后使用一些虚拟值填充最后一个位置(我猜是nullundefined)。