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>