簡體   English   中英

如果在凍結對象后添加新屬性,則會引發錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM