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>