2016-05-13 10 views
2

JavaScript/Node.jsを使用すると、フリーズ後にオブジェクトが変更された場合にエラーをスローすることはできますか?私は、オブジェクトに不変のプロパティを配置し、オブジェクトが再割り当てされないようにしたい。オブジェクトがフリーズした後に新しいプロパティが追加された場合にエラーがスローされる

この場合、ライブラリを作成しており、module.exports = x;という割り当ては不変である必要があります。

ユーザーがxにプロパティを追加したり、module.exportsが再割り当てされたりするのを防ぐためです。それだけでなく、静かなエラーの代わりに、ユーザーが上記を試してみるとエラーを投げたいですね、それは可能ですか?

答えて

2

ユーザーコードが厳密なモードで実行されている場合、自動的にエラーがスローされます。

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>

2

あなたはObject.freeze(x);を使用することができます。あなたがエラーを取得しbar.jsモジュールで

モジュールにおける例えば

foo.js

var foo = {id: 42}; 

Object.freeze(foo); 

module.exports = foo; 

'use strict'; 

var foo = require('./foo'); 

foo.bar = 42; // TypeError: Can't add property bar, object is not extensible 

エラーをスローするには、strictモードを使用する必要があります。それを使用しないと、オブジェクトは不変であり続けますが、エラーを投げることはありません。

関連する問題