Object.freeze
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()
返回和传入的参数相同的对象。
const obj = {
prop: 42
}; Object.freeze(obj); obj.prop = 33;
// Throws an error in strict mode console.log(obj.prop);
// expected output: 42
同样可以冻结数组
let a = [0];
Object.freeze(a); // 现在数组不能被修改了. a[0]=1; // fails silently
a.push(2); // fails silently
冻结对象只是进行了“浅冻结”
obj1 = {
internal: {}
}; Object.freeze(obj1);
obj1.internal.a = 'aValue'; obj1.internal.a // 'aValue'
实现深冻结需要使用递归进行操作
function deepFreeze(obj) { // 取回定义在obj上的属性名
var propNames = Object.getOwnPropertyNames(obj); // 在冻结自身之前冻结属性
propNames.forEach(function(name) {
var prop = obj[name]; // 如果prop是个对象,冻结它
if (typeof prop == 'object' && prop !== null)
deepFreeze(prop);
}); // 冻结自身(no-op if already frozen)
return Object.freeze(obj);
} obj2 = {
internal: {}
}; deepFreeze(obj2);
obj2.internal.a = 'anotherValue';
obj2.internal.a; // undefined
Object.isFrozen()方法判断一个对象是否被冻结。
Object.freeze的更多相关文章
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
前面提到 ES5 对象属性描述符,这篇看看对象的扩展.密封和冻结. 扩展对象 Object.preventExtensions Object.isExtensible 密封对象 Object.seal ...
- ES5特性之Object.freeze
Object.freeze方法比Object.seal方法更严格,不仅不能扩展新对象和不可重新配置属性的特性,还不能改变对象属性的值writable(不可写)
- [Javascript] Object.freeze() vs Object.seal()
let person = { firstName: "Zhentian", lastName: "Wan" }; /*Object.freeze() makes ...
- ECMA5.1中Object.seal()和Object.freeze()的区别
1 Object.seal(O)的调用 When the seal function is called, the following steps are taken: If Type(O) i ...
- javascript EcmaScript5 新增对象之Object.freeze
我们都知道在js里对象是很容易改变的 var obj1 ={ a:'111' } obj1.a = '222'; console.log( obj.a ) //output 222 对象的属性发生了变 ...
- Object.freeze(); 方法冻结一个对象。
Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改: 冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性 ...
- js中的Object.seal()与Object.freeze()
关键字:seal, freeze, property descriptor. 1.Object.seal() 参考文档(2)中这样描述: The Object.seal() method seals ...
- js 深冻结 与 浅冻结 Object.freeze
1.深冻结 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...
- vue Object.freeze() 优化
参考自:https://segmentfault.com/a/1190000006191558 Object.freeze()是ES5新增的特性,可以冻结一个对象,防止对象被修改. vue 1.0.1 ...
- js es6 Object.freeze
将对象冻结,使用Object.freeze方法 const foo = Object.freeze({}); // 常规模式时,下面一行不起作用: // 严格模式时,该行会报错 foo.prop = ...
随机推荐
- 【Spring IoC】Spring Bean(三)
一.Spring Bean的定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象. ...
- 生鲜超市项目错误及解决办法(安装mysqlclient)
错误1:安装Mysqlclient D:\Mxshop>pip install mysqlclient- 1.4.4-cp27-cp27m-win32 报错: ERROR: Could not ...
- zz【清华NLP】图神经网络GNN论文分门别类,16大应用200+篇论文最新推荐
[清华NLP]图神经网络GNN论文分门别类,16大应用200+篇论文最新推荐 图神经网络研究成为当前深度学习领域的热点.最近,清华大学NLP课题组Jie Zhou, Ganqu Cui, Zhengy ...
- EventBus事件总线(牛x版)
事件总线: public interface IEventBus { void Trigger<TEvent>(TEvent eventData, string topic = null) ...
- 成神之Java之路
既然励志在java路上走的更远,那就必须了解java的路径.先看图 image.png 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的 ...
- 树莓派跑yolo
https://blog.csdn.net/u011304078/article/details/85772764 https://blog.csdn.net/weixin_41665225/arti ...
- CSP2019滚粗记
CSP2019滚粗记 从不拖更 Day -inf 考完月考才停课\kel,然后月考又被吊打了. Day -1 和左边的\({\text L}\color{red} {\text{ongge}}\)右边 ...
- windows 排查javaWeb程序占用CPU过高问题(可追踪到问题代码所在行)
1.情景展示 java虚拟机占用这么高的CPU,肯定不正常! 2.原因分析 第一个是tomcat,正在运行java项目: 第二个是eclipse,因为eclipse的运行依赖于java. 现在的问 ...
- 推荐一款年轻人交友软件get
推荐一款年轻人交友软件get 1 介绍 Get是一款认识新朋友的年轻人交友软件.接唱,发现有趣的声音,找到你的音缘.限时聊天,加入给你分配一个3分钟的对象,你们能不能碰撞出一点火花呢?推荐好友,扩列处 ...
- logstash output时区差8个小时
logstash版本6.3.2,解决方式如下,不需要修改源码: input { redis { host => "127.0.0.1" port => " p ...