创建对象后再次调用扩展Float32Array的类的构造函数

时间:2019-04-19 10:17:00

标签: javascript firefox ecmascript-6

我正在尝试编写一组扩展Float32Array的类,但是当它在Firefox中运行时,当我尝试使用该对象时,该类的构造函数会再次被调用。

此脚本演示了错误:

"use strict";

class ARRAYty extends Float32Array {
    constructor(...a) {
        console.log('ARRAYty', ...a);
        super(10);
    }
}

var v = new ARRAYty();
console.log('V constructed');
console.log(v);
console.log(v);

在Firefox中,控制台显示

ARRAYty
V constructed
ARRAYty ArrayBuffer{} 0 10
Float32Array(10) [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
ARRAYty ArrayBuffer{} 0 10
Float32Array(10) [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

每次v初始化后,我都会再次调用构造函数(传递给它的三个参数似乎是Float32Array对象的内部组件。构造函数应该仅是调用new ARRAYty()时被调用一次。

有人可以看到为什么会这样吗?是Firefox实现中的错误/怪癖,还是我应该采取其他措施来避免这种情况?

在Chrome或Edge中不会发生这种情况,如果我将Float32Array替换为Array也不会发生。

0 个答案:

没有答案