昨天分享了特性组合的一般单独的使用方法,
今天要来分享一下他们的 Combo 连技和相关用到的东西。
把 writable
和 configurable
都设定成 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 改不了啊!!!!
如果你想要避免这个 Object 被新增额外的特性怎麽办?
登登登登登~
你可以使用 Object.preventExtensions(..)
。
const obj ={
a:17
};
Object.preventExtensions(obj);
obj.b = 123;
obj.b; // undefined
假使是非严格模式它就默默地失败了,但如果是严格模式他就会喷你 TypeError
。
如何建立一个密封过的物件呢?
什麽意思!? 就是你不准新增任何的特性也不可以删除既有的特性,但是你唯一能做的事就是修改他的值。
Object.seal(..)
,基本上这个就是你丢进去一个Object ,他就帮你呼叫刚刚提的 Object.preventExtensions(..)
和设定configurable
为 false
。
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 可以改~
不准新增删除和重新配置该特性,也不能更改值。
基本上就是 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))
>>: Day27-Alpine.js vs Vue.js浅谈(4)
先从 Firmata 找到类比相关功能。 类比输入(Analog Input) 在 Supporte...
问题回答 Vue 是 SPA 框架,而 Nuxt 是 Vue 生态系里的一个能同时实现 SPA 和 ...
接下来就要讲到Object storage的重头戏了 - 如何分散式的储存一个Object,达到安全...
惨 ...
终。於。完。赛。啦! 今年是我第一次参加铁人赛,真的有种焠链後重生的感觉。高密度的技术研究、文字输出...