在元素上使用Object.defineProperty.数据集,但属性仍然是可更改的
Using Object.defineProperty on elem.dataset, but property is still changable
我试图使用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也不能解决这个问题。是否有办法解决这个问题,这是一个bug,我不应该使用object。defineproperty以这种方式?
主机提供的对象不需要支持JavaScript定义的全部对象特性。此外,dataset
被指定为具有良好定义语义的DOMStringMap
。你要做的就是让它不符合这些语义。如果它工作,可以说将是一个bug;不工作是主机维护对象的定义行为。
相关文章:
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 鼠标悬停的属性数据是什么
- 如何筛选所有属性都是对象的对象
- 向插件添加属性(不是默认方式)
- 单击TextArea'时,文本区域中的属性名称是什么;s上下箭头按钮
- 浏览器仍然是单线程的吗
- 对象属性不是在工厂成员函数内部创建的
- 如何通过MongoDB驱动程序(node.js)将属性(属性名称是可变的)添加到对象中
- 重新审视网站优化的经验法则:JavaScript在现代浏览器中仍然是必不可少的
- 对象绑定模式的rest属性应该是最后一个
- Wordpress uncatch TypeError:对象 [对象对象] 的属性 '$' 不是函数
- 从新对象的属性更新对象的属性,但前提是新对象上的属性不是未定义的
- 调整图像大小以使其完美地适合幻灯片,问题仍然是用 for 循环将 CSS 代码替换为我的图像
- 属性不是函数异常
- ECMAScript 中的内部属性定义是为了什么
- 类型错误属性 然后是未定义的
- 带有 setter 方法的 JavaScript 属性不是真正的属性
- JavaScript 用具有特定 ID 的正则表达式 img 标记替换,但其他属性可以是任何属性
- 不可设置和不可写属性仍然是可变的
- 在元素上使用Object.defineProperty.数据集,但属性仍然是可更改的