今天又在打代码

导航

DeepFreeze深层冻结对象属性值的修改

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <script>
 9             let obj ={
10                 name: '爸爸',
11                 age: 11,
12                 child: {
13                     chileName: '儿子',
14                     chileAge: 1,
15                     toy: {
16                         num:25
17                     }
18                 }
19             }
20             // 输出所有的属性名字,这个只能获取到第一层的
21             let objPro = Object.getOwnPropertyNames(obj)
22             console.log(objPro)
23             // 进行冻结
24             Object.freeze(obj)
25             // 进行修改第一层和第二层
26             obj.name = '你好'
27             console.log(obj.name) //还是输出爸爸
28             obj.child.chileName = '小红'
29             console.log(obj.child.chileName) //输出小红
30             
31             //想要将整个对象都冻结
32             function deepFreeze(object) {
33                 let propNames = Object.getOwnPropertyNames(object);
34                 for (let name of propNames) {
35                     let value = object[name];
36                     object[name] = value && typeof value === 'object'? deepFreeze(value):value;
37                 }
38                 return Object.freeze(object)
39             }
40             //再次进行操作
41             deepFreeze(obj)
42             obj.name = '你好'
43             console.log(obj.name) //还是输出爸爸
44             obj.child.chileName = '小黑'
45             console.log(obj.child.chileName) //输出小红
46         </script>
47     </body>
48 </html>

 

posted on 2020-07-03 13:18  今天又在打代码  阅读(302)  评论(0编辑  收藏  举报