JS 物件扩充的修改与调整 DAY69

物件扩充的修改与调整

是针对物件本身(请牢记!!)

  • preventExtensions (防止扩充)
  • seal (封装)
  • Freeze (冻结)

preventExtensions 防止扩充

var family = {
    a: 1,
    b: 2,
    c: {},
}
// preventExtensions 防止扩充

console.log('是否可被扩充',Object.isExtensible(family)); // true
Object.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)); // true
Object.seal(family);   
console.log('是否可被扩充',Object.isExtensible(family)); // false
console.log('是否被封装',Object.isSealed(family)); // true
console.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)); // false
console.log('是否被封装',Object.isSealed(family)); // true
console.log('是否被冻结',Object.isFrozen(family)); // true
console.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'));

那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷/images/emoticon/emoticon41.gif


<<:  电子商贸系列 | 善用电子商贸增加客源

>>:  以Postgresql为主,再聊聊资料库 width_bucket() 的介绍

【Day 5_ Arm Mali GPU家族究竟是何方神圣_下篇】

延续上篇还没介绍完的Arm Mali GPU系列解决方案,今天要来接着介绍Mali-G510 GPU...

[day24] 产生订单

以後不切这麽多表格了,搞死自己 发动产生订单只需要使用者UID一个参数,大略流程如下 藉由UID取得...

Day 07 Section Summary

Introduction to embedded system Components and app...

EP03 - aws cli configuration 与 terraform 配置

准备工具 Visual Studio Code 或自己习惯的 IDE 可用的 AWS 帐户 目标 昨...

[Day-12] R语言 - K - prototype 实作 ( K - prototype in R.Studio)

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 ## k prototype #### lib...