我正在尝试使用ArrayBuffers,Websockets和DataStream.js库编写一些应用程序,但是在非常简单的代码上却失败了,并且我还没有找到有关同一问题的任何相关页面。

问题是

var arr = new Uint8Array(6);
alert(arr.BYTES_PER_ELEMENT);


返回未定义。我可以直接使用Uint8Array.BYTES_PER_ELEMENT(在Opera 1中),但是DataStream.js库使用“通用”方式获取此属性:(DataStream.js:377)

DataStream.memcpy(arr.buffer, 0,
                this.buffer, this.byteOffset+this.position,
                length*arr.BYTES_PER_ELEMENT);


有什么方法可以使它通用,但可以在Opera 12中使用吗?类似于arr.__proto__.BYTES_PER_ELEMENT

还是我做错了什么?在Chromium中可以正常运行。

最佳答案

因此,在与ivy_lynx简短讨论之后,我决定以这种简单的方式进行操作,该操作设置了应在原型中设置的值。现在,即使在Opera 12.16中,DataStream.js库也可以正常运行

if (Uint8Array.prototype.BYTES_PER_ELEMENT == undefined) {
    Uint8Array.prototype.BYTES_PER_ELEMENT = Uint8Array.BYTES_PER_ELEMENT;
    Uint8ClampedArray.prototype.BYTES_PER_ELEMENT = Uint8ClampedArray.BYTES_PER_ELEMENT;
    Int8Array.prototype.BYTES_PER_ELEMENT = Int8Array.BYTES_PER_ELEMENT;
    Uint16Array.prototype.BYTES_PER_ELEMENT = Uint16Array.BYTES_PER_ELEMENT;
    Int16Array.prototype.BYTES_PER_ELEMENT = Int16Array.BYTES_PER_ELEMENT;
    Uint32Array.prototype.BYTES_PER_ELEMENT = Uint32Array.BYTES_PER_ELEMENT;
    Int32Array.prototype.BYTES_PER_ELEMENT = Int32Array.BYTES_PER_ELEMENT;
    Float64Array.prototype.BYTES_PER_ELEMENT = Float64Array.BYTES_PER_ELEMENT;
}

09-18 18:28