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

标签 javascript html dataset configurable defineproperty

我正在尝试使用 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 被指定为 DOMStringMapwell-defined semantics 。您尝试做的事情会使其不遵循这些语义。如果它有效,那么可以说将是一个错误;不工作的是主机维护对象的定义行为。

关于javascript - 在 elm.dataset 上使用 Object.defineProperty,但属性仍然可以更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165102/

相关文章:

javascript - 如何在 window.scrollTo(x-coord, y-coord); 中控制滚动速度;

html - 内部 h2 需要为 100% 高度

javascript - 如何将正则表达式与字符串中间的起始索引匹配?

python - 在网页上显示大量 png 文件

html - 不显示 CSS 背景

machine-learning - 数据增强工作流程

dataset - 如何更新 RDLC 报告的数据集

hadoop - 大量开放源数据供研究

javascript - 将内容从一个网页传输到同一网站中的另一个网页?

javascript - 如何从 URL 中获取片段标识符(哈希 # 后的值)?