0

Object.defineProperty を使用して、キャンバス要素のデータセットに変更不可能なプロパティを設定しようとしています。通常のオブジェクトでは、これは正常に機能します。しかし、データセット オブジェクトでそれを実行しようとすると、プロパティはまだ変更可能です。

<canvas id="can" style="outline:1px solid black"></canvas>

<script>
var can = document.getElementById("can");
var obj = {};
Object.defineProperty(can.dataset,"id",{value:2,configurable:false});
Object.defineProperty(obj,"id",{value:4,configurable:false});

can.dataset.id = 55;
console.log(can.dataset.id) //Returns "55" as a string

obj.id = 55;
console.log(obj.id) //Returns 4 - unchanged

</script>

writable: false を使用しても解決しません。これを解決する方法はありますか、それはバグですか、このように Object.defineProperty を使用することは想定されていませんか?

4

1 に答える 1

1

ホスト提供のオブジェクトは、JavaScript によって定義されたオブジェクト機能の完全なセットをサポートする必要はありません。さらに、はセマンティクスが明確に定義さdatasetた として指定されます。あなたがやろうとしていることは、それらのセマンティクスに従わないでしょう。それが機能した場合、おそらくそれはバグです。機能していないのは、オブジェクトの定義された動作を維持しているホストです。DOMStringMap

于 2015-08-23T09:35:32.737 に答える