我正在尝试使用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;
}