【这些年我似是非懂的 Javascript】Day 28 - 物件 # Part 4 # 特性描述器 Combo

昨天分享了特性组合的一般单独的使用方法,
今天要来分享一下他们的 Combo 连技和相关用到的东西。

物件常数 (Object constant)

writableconfigurable 都设定成 false,就可以建立出一个不能修改也不能被变更的物件常数。

const obj = {}; // 给个空物件

Object.defineProperty(obj,"a",{
    value: 17,
    writable: false,
    enumerable: true,
    configurable: false
});

obj.a; // 17  出现啦~
obj.a = 123;
obj.a; // 17 // 改不了啊!!!!

Object.defineProperty(obj,"a",{
    value: 17,
    writable: true,
    enumerable: true,
    configurable: true
}); // TypeError 改不了啊!!!!

避免扩充 (Prevent extensions)

如果你想要避免这个 Object 被新增额外的特性怎麽办?
登登登登登~
你可以使用 Object.preventExtensions(..)

const obj ={
    a:17
};

Object.preventExtensions(obj);

obj.b = 123;
obj.b; // undefined

假使是非严格模式它就默默地失败了,但如果是严格模式他就会喷你 TypeError

密封 (Seal)

如何建立一个密封过的物件呢?
什麽意思!? 就是你不准新增任何的特性也不可以删除既有的特性,但是你唯一能做的事就是修改他的值。
Object.seal(..),基本上这个就是你丢进去一个Object ,他就帮你呼叫刚刚提的 Object.preventExtensions(..) 和设定configurablefalse

const obj = {
    a:17
};

Object.seal(obj);

obj.b = 123;
obj.b; // undefined 不能增加特性

Object.defineProperty(obj,"a",{
    value: 16,
    writable: true,
    enumerable: true,
    configurable: true
}); // TypeError 不给改啊!!!

obj.a = 123;
obj.a; // 123 可以改~

冻结 (Freeze)

不准新增删除和重新配置该特性,也不能更改值。
基本上就是 Object.seal + writable: false

const obj = {
    a:17,
};

Object.freeze(obj);

obj.b = 123;
obj.b; // undefined 不能增加特性

Object.defineProperty(obj,"a",{
    value: 16,
    writable: true,
    enumerable: true,
    configurable: true
}); // TypeError 不给改啊!!!

obj.a = 777;
obj.a; // 17 也不给改啊!!!

你剩下能做的大概就只剩读取他和对他迭代。

以上是今天的内容

明天倒数两天啦啦啦!
看起来要读完这本是凉了xDD
不过物件这章节应该可以结束。
明天主要会讲特性的存取一些眉眉角角~
"可能"还有迭代 xD~

感谢您的收看
我们明天见


参考来源:

你所不知道的 JS|范畴与 Closures,this 与物件原型 (You Don't Know JS: this & Object Prototypes))


<<:  [Day 29] 部属(heroku)

>>:  Day27-Alpine.js vs Vue.js浅谈(4)

D14 - 「类比×电压×输入」:类比功能

先从 Firmata 找到类比相关功能。 类比输入(Analog Input) 在 Supporte...

不只懂 Vue 语法:以 Vue 和 Nuxt 为例,说明 SPA 和 SSR 的概念?

问题回答 Vue 是 SPA 框架,而 Nuxt 是 Vue 生态系里的一个能同时实现 SPA 和 ...

Day22 Lab 2 - Object storage的RAID实作1

接下来就要讲到Object storage的重头戏了 - 如何分散式的储存一个Object,达到安全...

惨 ...

D30 / 终於完赛啦!- 写写第一次参赛的感想

终。於。完。赛。啦! 今年是我第一次参加铁人赛,真的有种焠链後重生的感觉。高密度的技术研究、文字输出...