的length
属性Float32Array
是readonly,所以你不能用函数替换它。在当前的草案规范中,您可以在第 7 节中看到这一点:
interface TypedArray {
const unsigned long BYTES_PER_ELEMENT = element size in bytes;
readonly attribute unsigned long length; // <=== Note `readonly`
getter type get(unsigned long index);
setter void set(unsigned long index, type value);
void set(TypedArray array, optional unsigned long offset);
void set(type[] array, optional unsigned long offset);
TypedArray subarray(long begin, optional long end);
};
截至您的编辑:
我替换length
为getLength
. 现在它可以在除 Firefox 之外的任何地方工作:(intermediate value).getLength is not a function
像这样交换问题的内容并不是很酷。但是 Firefox 可能认为Float32Array
对象是不可扩展的。如果是这样,您可能需要添加另一层,以便您可以getLength
在中间原型上。例如:
function protovector() {
}
protovector.prototype = new Float32Array(3);
function vector(/* ... */) {
}
vector.prototype = new protovector();
vector.prototype.getLength = function() {
// ...
};
或者只是把length
或getLength
放在实例上:
function vector(/* ... *) {
// this[0] = ...
this.length = function() {
// ...
};
}
但是由于类型化数组在构造时是固定长度的,所以我不确定你从一开始就把它Float32Array
用作原型有多少好处。