防篡改对象

2019-07-08 17:10:54 浏览数 (1)

JavaScript多人开发协作过程中,很可能会意外篡改他人代码。防篡改对象,通过不可扩展、密封、冻结来解决这个问题。

需要特别注意的是:一旦把对象定义为防篡改,就无法撤销了。

1、不可扩展对象

代码语言:javascript复制
1 var person = {
2     name: "Person Name"
3 }
4 Object.preventExtensions(person);
5 
6 person.age = 29;
7 alert(person.age);  // undefined

通过 Object.isExtensible([Object]) 可以确定对象是否可以扩展。 true 可以扩展, false 不可以扩展。

不可扩展的对象,不能新增属性。

2、密封的对象

代码语言:javascript复制
 1 var person = {
 2     name: "Person Name"
 3 }
 4 Object.seal(person);
 5 
 6 person.age = 29;
 7 alert(person.age); // undefined
 8 
 9 delete person.name;
10 alert(person.name); // Person Name

通过 Object.isSealed([Object]) 可以确定对象是否被密封了。

被密封的对方,不能新增属性,也不能删除属性。

3、冻结的对象

代码语言:javascript复制
 1 var person = {
 2     name: "Person Name"
 3 }
 4 Object.freeze(person);
 5 
 6 person.age = 29;
 7 alert(person.age); // undefined
 8 
 9 delete person.name;
10 alert(person.name); // Person Name
11 
12 person.name = "New Name";
13 alert(person.name); // Person Name

通过 Object.isFrozen([Object]) 来检测对象是否被冻结。

被冻结的对象,不能新增属性,并不能删除属性,也不能修改属性。

4、总结

冻结 > 密封 > 不可扩展

不可扩展

✖️

✔️

✔️

密封

✖️

✖️

✔️

冻结

✖️

✖️

✖️

0 人点赞