JS对象-不可扩展对象、密封对象、冻结对象
2024-09-05 05:18:25
不可扩展对象
Object.preventExtensions()
仅阻止添加自身的属性。但属性仍然可以添加到对象原型。
可以用 Object.isExtensible(obj) 来判断对象是否可扩展
密封对象
Object.seal()
密封对象不可扩展,而且已有的属性成员[[configurable]]
特性将被设置成false
可以用 Object.isSealed() 来判断对象是否已经被密封
冻结对象
Object.freeze()
冻结的对象既不可以扩展,又是密封的,而且对象数据属性的[[writable]]特性会被设置为false。
由于访问器属性没有writable,所以访问器属性还是可以用的:
let _obj = {name: 123}
let obj = {} Object.defineProperty(obj, 'name', {
configurable: true,
enumerable: true,
set(val) {
_obj.name = val;
},
get() {
return _obj.name
}
}) Object.freeze(obj);
obj.name //
obj.name = 666;
obj.name //
总结:
方法名 | 增(extensible) | 删(configurable) | 改(writable) |
Object.preventExtensions | × | √ | √ |
Object.seal | × | × | √ |
Object.freeze | × | × | × |
最新文章
- Git异常:Cannot delete the branch 'test1' which you are currently on
- Linux环境下的Nginx编译与安装
- 理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER
- ASP.NET MVC Razor语法
- hdu 2191 多重背包
- VM Depot 镜像新增系列II – 学习管理系统,内容管理系统以及平台管理工具
- 2014年河南省第七届ACM大赛总结
- 重复数据删除(De-duplication)技术研究(SourceForge上发布dedup util)
- ES 6 : let与const
- tablelayoutpanel内部组件变形
- JDBC02 利用JDBC连接数据库【使用数据库连接池】
- openstack pike与ceph集成
- express学习之session
- rails中link_to与button_to的一个功能差异
- windows根据端口号杀进程
- Anaconda的安装与使用
- LODOP不同打印机出现偏移问题
- kvm虚拟化2-qemu-kvm
- CentOS7时间和日期的同步 (chrony和)
- Java学习---- 数组的引用传递