Object.freeze()注意事项

Object.freeze():运行时的锁

js 复制代码
const config = { apiKey: 'sk-xxxxxx', timeout: 5000 }; 

Object.freeze(config);

config.timeout = 3000;
console.log(config.timeout); // 5000,没变(严格模式会抛 TypeError)

但 freeze 有个暗坑:只锁表面

js 复制代码
const config = { 
    env: 'production', 
    db: { host: '127.0.0.1', port: 3306 } 
}; 

Object.freeze(config); 

config.db.port = 5432; 
console.log(config.db.port); // 5432 ------ 改成功了

config.db引用 被冻住了,但 db 对象本身没有被冻结,内部属性随便改。

所有需要有深层的冻结,只能手写一个方法实现

js 复制代码
function deepFreeze(obj) { 
    Object.getOwnPropertyNames(obj).forEach(key => { const val = obj[key]; 
        if (val && typeof val === 'object') deepFreeze(val);
    }); 
    return Object.freeze(obj); 
} 
deepFreeze(config); 
config.db.port = 5432; // 失效 console.log(config.db.port); // 3306

性能优化点

传入前 Object.freeze(),Vue 会跳过响应式代理,渲染快一截

相关推荐
UXbot21 小时前
原型设计工具如何帮助新人快速进入产品行业?
前端·低代码·ui·交互·团队开发·原型模式·web app
黄敬峰21 小时前
从 DFS 遍历到抖音推荐算法:前端工程师的硬核复习笔记
前端
zach21 小时前
网页中的虚拟滚动技术是不是源自IOS中的tableview的机制
前端
林希_Rachel_傻希希21 小时前
1小时速通React之Hooks
前端·javascript·面试
柯克七七21 小时前
公司前端项目打包体积从 2MB 降到 400KB,我改了这四个配置
前端
英勇无比的消炎药21 小时前
我才发现这些架构的“拆”与“合”哲学
前端
shen_1 天前
AI Coding:前端UI规范笔记
前端
石山代码1 天前
JavaScript 进阶核心知识点
开发语言·javascript·ecmascript
llz_1121 天前
web-第五次课后作业
前端·后端·http