物件扩充的修改与调整
是针对物件本身(请牢记!!)
preventExtensions (防止扩充)seal (封装)Freeze (冻结)preventExtensions 防止扩充
var family = { a: 1, b: 2, c: {},}// preventExtensions 防止扩充console.log('是否可被扩充',Object.isExtensible(family)); // trueObject.preventExtensions(family); console.log('是否可被扩充',Object.isExtensible(family)); // false// getOwnPropertyDescriptor 观看物件属性的特徵为何console.log('family a 的属性特徵' , Object.getOwnPropertyDescriptor(family,'a'));// 特徵皆为true// 调整属性family.a = 'a';// 新增属性family.d = 'a'; // 无法新增// 巢状属性调整family.c.a = 'ca';// 调整特徵Object.defineProperty(family,'a',{ configurable: false,})// 删除delete family.b;// 结果console.log(family);console.log('family a 属性特徵(尝试修改后)', Object.getOwnPropertyDescriptor(family,'a'));
seal 封装
var family = { a: 1, b: 2, c: {},}// seal 封装// 物件物件属性无法新增删除,也无法重新配置特徵,但是可以调整目前属性值// seal 是 preventExtensions 加上 上述的限制console.log('是否可被扩充',Object.isExtensible(family)); // trueObject.seal(family); console.log('是否可被扩充',Object.isExtensible(family)); // falseconsole.log('是否被封装',Object.isSealed(family)); // trueconsole.log('family a 的属性特徵' , Object.getOwnPropertyDescriptor(family,'a'));// 这里 configurable 为 false// 调整属性family.a = 'a';// 新增属性family.d = 'a'; // 无法新增// 巢状属性调整family.c.a = 'ca';// 调整特徵 (无法调整 writable 一样为true)Object.defineProperty(family,'a',{ writable: false,})// 删除 (无法删除)delete family.b;// 结果console.log(family);console.log('family a 属性特徵(尝试修改后)', Object.getOwnPropertyDescriptor(family,'a'));
freeze 冻结
var family = { a: 1, b: 2, c: {},}// freeze 冻结// 物件加上 seal , 并且无法调整值Object.freeze(family); console.log('是否可被扩充',Object.isExtensible(family)); // falseconsole.log('是否被封装',Object.isSealed(family)); // trueconsole.log('是否被冻结',Object.isFrozen(family)); // trueconsole.log('family a 的属性特徵' , Object.getOwnPropertyDescriptor(family,'a'));// 这里 configurable writable 为 false// 调整属性family.a = 'a';// 新增属性family.d = 'a'; // 无法新增// 巢状属性调整family.c.a = 'ca';// 调整特徵 (无法调整 会跳出错误)// Object.defineProperty(family,'a',{// writable: true,// })// 删除 (无法删除)delete family.b;// 结果console.log(family);console.log('family a 属性特徵(尝试修改后)', Object.getOwnPropertyDescriptor(family,'a'));
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷