在 elem.dataset 上使用 Object.defineProperty,但 属性 仍然可以更改

Using Object.defineProperty on elem.dataset, but property is still changable

我正在尝试使用 Object.defineProperty 在 canvas 元素的数据集上设置不可更改的 属性。在普通对象上,这工作正常。但是当我尝试在数据集对象上执行此操作时,属性 仍然可变。

<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 吗?

主机提供的对象不需要支持 JavaScript 定义的全套对象功能。此外,dataset 被指定为 DOMStringMap with well-defined semantics。您正在尝试做的事情会使它不遵循这些语义。如果它有效,可以说 that 将是一个错误;不工作是主机维护对象的定义行为。