前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >防篡改对象

防篡改对象

作者头像
就只是小茗
发布2019-07-08 17:10:54
9370
发布2019-07-08 17:10:54
举报
文章被收录于专栏:一个小程序员的成长笔记

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、总结

冻结 > 密封 > 不可扩展

不可扩展

✖️

✔️

✔️

密封

✖️

✖️

✔️

冻结

✖️

✖️

✖️

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档