[英]throw error if new properties are added after object has been frozen
使用JavaScript / Node.js,如果凍結后修改了對象,是否有可能引發錯誤? 我想在對象上放置一個不變的屬性,並且還希望防止對象被重新分配。
在這種情況下,我正在編寫一個庫,並且需要分配module.exports = x;
是一成不變的。
我想防止用戶向x添加屬性,並防止重新分配module.exports。 不僅如此,如果用戶嘗試以上操作,我想拋出一個錯誤,而不是一個無提示的錯誤,是否可能?
如果用戶代碼在嚴格模式下運行,它將自動引發錯誤。
function log(obj) { document.querySelector('pre').innerText += JSON.stringify(obj, null, 2) + '\\n'; } function nonStrict(obj) { obj.b = 2; log(obj); } function strict(obj) { 'use strict'; try { obj.b = 2; } catch(e) { log(e.message); } } var obj = { a: 1 }; Object.freeze(obj); nonStrict(obj); strict(obj);
<pre></pre>
您可以使用Object.freeze(x);
。
例如在模塊foo.js
var foo = {id: 42};
Object.freeze(foo);
module.exports = foo;
在模塊bar.js
您得到錯誤。
'use strict';
var foo = require('./foo');
foo.bar = 42; // TypeError: Can't add property bar, object is not extensible
請注意,要拋出錯誤,您需要使用嚴格模式。 如果不使用它,該對象將繼續是不可變的,但不會引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.