2

Float32Arrayに「x」、「y」、「z」という3つのプロパティを追加しました。ゲッターはクロームとFirefoxの両方で正常に機能しますが、セッターはクロームでのみ機能するようです。何故ですか?バグですか?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;
4

2 に答える 2

1

私はその問題が非常に興味深いと感じ、それを調査しました。私はあなたが直面した問題を再現することができます。セッターは呼び出されませんが、ゲッターは呼び出されます。探索すると、次のテキストが見つかりました。

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

URLを見てください: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

セキュリティの脆弱性として引用された理由(影響を受けるツイッター)ここ
でクロムでこれに関する議論に従ってください

于 2012-12-14T09:56:58.433 に答える
0

ここで起こっていることは、Firefoxが型付き配列に数値以外のプロパティを設定することを許可していないということです。そのようなセットはすべて無視されます。また、プロトタイプチェーンを検索する前に無視されるため、プロトタイプのセッターは呼び出されません。

ここでの正しい動作が仕様ごとに何であるかは私にはわかりません。このエリアでは数回変更されています。

https://bugzilla.mozilla.org/show_bug.cgi?id=695438に注意してください

于 2012-12-15T17:34:19.957 に答える