Javascript - 在Opera中未定义BYTES_PER_ELEMENT

时间:2014-07-23 14:39:53

标签: javascript opera arraybuffer

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

问题在于

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

返回undefined。我可以直接使用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中它可以正常工作。

1 个答案:

答案 0 :(得分:0)

因此,经过与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; 
}