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);
Object.preventExtensions(myTesla);
Object.isExtensible(myTesla);
myTesla.color = 'blue' ;
console.log(myTesla.color)
|
Object.seal() 密封
它可以防止添加或刪除屬性,seal() 還可以防止修改屬性描述符。
1 2 3 4 5 6 7 8 9 10 11 | Object.isSealed(myTesla);
Object.seal(myTesla);
Object.isSealed(myTesla);
myTesla.color = 'blue' ;
console.log(myTesla.color);
delete myTesla.batteryLife;
console.log(myTesla.batteryLife);
Object.defineProperty(myTesla, 'batteryLife' );
|
Object.freeze() 凍結(jié)
它的作用與 Object.seal() 相同,而且它使屬性不可寫。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Object.isFrozen(myTesla);
Object.freeze(myTesla);
Object.isFrozen(myTesla);
myTesla.color = 'blue' ;
console.log(myTesla.color);
delete myTesla.batteryLife;
console.log(myTesla.batteryLife);
Object.defineProperty(myTesla, 'batteryLife' );
myTesla.batteryLife = 400;
console.log(myTesla.batteryLife);
|
注意:如果希望在嘗試修改不可變對象時拋出錯誤,請使用嚴格模式。