Object.freeze()
- 渲染大量数据时应该怎么优化?
- 这个方法是用来冻结对象的,调用这个方法的对象不能添加新的属性、方法
let obj = {
name: '张三',
age: 18,
}
Object.freeze(obj)
obj.hobby = 'rap'
console.log(obj)
- 如上图,在冻结对象以后,使用点语法添加了新的属性hobby,但是我们打印出来会发现新增属性这一操作是无效的,因为对象已经被冻结了,在严格模式下,冻结之后使用点语法添加新属性控制台会报错。
- 当然,这只是针对简单的对象来进行冻结,如果遇到了复杂的对象,对象的属性值又为对象这种情况,那么我们就要利用递归,来给对象及其为对象的子属性进行冻结:
封装函数:
// 深度冻结对象
const freezeDeep = (obj) => {
Object.freeze(obj)
Object.keys(obj).forEach((key, i) => {
if (obj[key] instanceof Oject) {
freezeDeep(obj[key])
}
})
}