Float32Array设置属性在Firefox中不起作用

时间:2012-12-14 08:41:12

标签: javascript google-chrome firefox

我在Float32Array中添加了3个名为'x','y'和'z'的属性。 getter在chrome和firefox中运行良好,但看起来setter只适用于chrome。这是为什么?这是一个错误吗?有没有办法让它在firefox中运行?

Object.defineProperty(Float32Array.prototype, 'x', {
    get: function(){
        return this[0];
    },
    set: function(x){
        this[0] = x;
    }
});


// creating a Float32Array-Vector using mjs.js  
var vector = V3.$(1,2,3);

// works fine
document.writeln(vector.x);

// works in chrome but not in firefox
vector.x = vector.y + vector.z;

2 个答案:

答案 0 :(得分:1)

我发现问题非常有趣并且已经研究过了。我能够重现你遇到的问题。永远不会调用setter但调用getter。在探索时,找到以下文字:

JavaScript 1.8.1 note
Starting in JavaScript 1.8.1, setters are no longer called when setting properties in object and array initializers.

查看网址:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects

还有更多参考资料:https://developer.mozilla.org/en-US/docs/JavaScript/New_in_JavaScript/1.8.1

https://dev.mozilla.jp/localmdc/localmdc_11696.html

引用安全漏洞的原因(受影响的推特)
在铬here

中进行讨论

答案 1 :(得分:0)

这里发生的事情是Firefox不允许在类型化数组上设置任何非数字属性;任何这样的集都会被忽略。在搜索原型链之前,它们被忽略了,这就是原型上的setter没有被调用的原因。

我不清楚这里的正确行为是什么;它在这方面改变了几次。

注意https://bugzilla.mozilla.org/show_bug.cgi?id=695438