Object.preventExtensions

  • 浅操作
  • 让一个对象不可拓展
  • 可删除 可修改 不可拓展
  • 返回不可拓展的对象
    • 仅阻止添加自身的属性
    • 原型链属性还可以添加 但不能解除引用关系
1
2
3
4
5
6
7
8
9
10
let obj = Object.preventExtensions(obj)
#
freeze 不可修改 不可删除 不可拓展
seal 可修改 不可删除 不可拓展
preventExtensions 可修改 可删除 不可拓展
# 空对象都是false
var obj = {}
Object.preventExtensions(obj)
Object.isFrozen(Obj) // true
Object.isSealed(obj) // ture

手写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const obj = {
a: 1,
b: {
c: {
d: 3
}
}
}
Object.deepPreventExtensions = function (o) {
var _keys = Object.getOwnPropertyNames(o)
if (_keys.length) {
_keys.forEach((k) => {
var _v = o[k];
if (typeof _v === 'object' && _v !== null) {
Object.deepPreventExtensions(_v)
}
})
}
return Object.preventExtensions(o)
}

Object.deepPreventExtensions(obj)
obj.b.c.e = 5
console.log(obj); // 不存在e

仓库地址