3

Object.preventExtensionsObject.sealは、不明なプロパティがオブジェクトに追加されるのを防ぎますが、これらの属性はエラーをスローする代わりにサイレントに失敗します。それらを強制的にエラーにする方法はありますか?

var myObj = Object.seal({});
try{
    myObj.someProp = 17;
    console.log("I don't want to reach this message");
}catch(err){
    console.log("I want an error to occur instead.")
    console.log("Or at least get a warning somewhere.");
}

これをChrome19とFirefox9でテストしました。開発中にのみ必要になるため、ブラウザー固有のソリューションも気にしません。

4

2 に答える 2

1

strictモードがオプションの場合、Object.sealは(少なくともFirefoxでは)そのトリックを実行するようです。

封印されたオブジェクトのプロパティを削除または追加しようとしたり、データプロパティをアクセサーに変換したり、その逆を試みたりすると、サイレントに、またはTypeErrorをスローすることによって失敗します(厳密なモードコードの場合、最も一般的ですが、排他的ではありません)。

かなりうまく機能します:http://jsfiddle.net/yVWr6/

(ところで:preventExtensions()でも同じように機能します)

于 2012-06-14T23:38:19.323 に答える
1

(および)のMDNドキュメントにObject.seal()よると、Object.freeze()厳密モードを有効にすると、封印されたオブジェクトを変更しようとするとTypeErrorがスローされます。

function go() {
  'use strict';
  var x = {};
  Object.seal(x);
  x.foo = 123;
}
go(); // => TypeError: Can't add property foo, object is not extensible
于 2012-06-14T23:39:29.447 に答える