Object.seal()
此方法可以將物件密封起來。
密封物件的特點如下:
(1).物件不可擴充套件,也就是不能夠新增新屬性。
(2).物件的現有屬性被設定為不可配置,也就是configurable屬性值為true。
(3).如果物件的屬性是可寫的,那麼屬性值可寫。
(4).物件的可列舉性不受影響。
(5).物件繼承自原型鏈的屬性不受影響。
關於configurable用法參閱configurable、enumerable和writable一章節。
更多內容可以參閱JavaScript Object 物件一章節。
ES5新增此方法。
語法結構:
[JavaScript] 純文字檢視 複製程式碼Object.seal(obj)
引數解析:
(1).obj:必需,規定要被密封的物件。
瀏覽器支援:
(1).IE9+瀏覽器支援此方法。
(2).edge瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).火狐瀏覽器支援此方法。
(5).opera瀏覽器支援此方法。
(6).safria瀏覽器支援此方法。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", age:4, address:"青島市南區" }; Object.seal(antzone); antzone.age = 5; console.log(antzone.age)
程式碼執行效果截圖如下:
直接量方式建立的屬性預設都是可讀寫的。
只要原來是可讀寫的,那麼密封后也是可讀寫。
[JavaScript] 純文字檢視 複製程式碼執行程式碼"use strict" let antzone = { webName: "螞蟻部落", age:4, address:"青島市南區" }; Object.seal(antzone); antzone.url="http://www.softwhy.com";
程式碼執行效果截圖如下:
在嚴格模式下,如果對密封物件新增新屬性,那麼就會報錯。
在非嚴格模式下,新增屬性無效,但是不會報錯。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", age:4, address:"青島市南區" }; Object.seal(antzone); console.log(Object.getOwnPropertyDescriptor(antzone,"webName"));
程式碼執行效果截圖如下:
可以看到物件被密封之後,webName屬性的configurable特性值變為false,也就是不可配置。
[JavaScript] 純文字檢視 複製程式碼執行程式碼Object.prototype.mayi="antzone" let antzone = { webName: "螞蟻部落", age:4, address:"青島市南區" }; Object.seal(antzone); console.log(Object.getOwnPropertyDescriptor(Object.prototype,"mayi"));
程式碼執行效果截圖如下:
可以看到Object.seal方法對於原型鏈上的屬性沒有影響。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName: "螞蟻部落", age:4, address:"青島市南區" }; Object.seal(antzone); for(let prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
可以看到,此方法對屬性的可列舉性沒有任何影響。