亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

js如何創(chuàng)建不可變的對象

來源:V 發(fā)布時間:2020-05-20 09:58:43 閱讀量:1742

對象的不變性意味著我們不希望對象在創(chuàng)建后以任何方式更改(將它們設(shè)置為只讀類型)。

假設(shè)我們需要定義一個 car 對象,并在整個項目中使用它的屬性來執(zhí)行操作。我們不能允許錯誤地修改任何數(shù)據(jù)。

1

2

3

4

5

const myTesla = {

 maxSpeed: 155,

 batteryLife: 300,

 weight: 2300

};

Object.preventExtensions() 防止擴展

此方法可防止向現(xiàn)有對象添加新屬性,preventExtensions() 是不可逆的操作,我們永遠不能再向?qū)ο筇砑宇~外的屬性。

1

2

3

4

5

Object.isExtensible(myTesla); // true

Object.preventExtensions(myTesla);

Object.isExtensible(myTesla); // false

myTesla.color = 'blue';

console.log(myTesla.color) // undefined

Object.seal() 密封

它可以防止添加或刪除屬性,seal() 還可以防止修改屬性描述符。

1

2

3

4

5

6

7

8

9

10

11

Object.isSealed(myTesla); // false

Object.seal(myTesla);

Object.isSealed(myTesla); // true

 

myTesla.color = 'blue';

console.log(myTesla.color); // undefined

 

delete myTesla.batteryLife; // false

console.log(myTesla.batteryLife); // 300

 

Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife

Object.freeze() 凍結(jié)

它的作用與 Object.seal() 相同,而且它使屬性不可寫。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Object.isFrozen(myTesla); // false

Object.freeze(myTesla);

Object.isFrozen(myTesla); // true

 

myTesla.color = 'blue';

console.log(myTesla.color); // undefined

 

delete myTesla.batteryLife;

console.log(myTesla.batteryLife); // 300

 

Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife

 

myTesla.batteryLife = 400;

console.log(myTesla.batteryLife); // 300

注意:如果希望在嘗試修改不可變對象時拋出錯誤,請使用嚴格模式。


分享:
評論:
你還沒有登錄,請先