オブジェクト プロパティの削除を検出する方法はありますか?
4 に答える
はい、可能です。プロパティに setter/getter を使用できるのと同様に、オブジェクト プロパティに「deleter」関数を使用できます。
function myFunc() {}
myFunc.prototype = {
constructor: myFunc,
deleteProp: function( prop ) {
delete this[ prop ];
}
};
メソッドでは、deleteProp
前後に何でもできます。
hasOwnPropertyまたはおそらくpropertyIsEnumerableを使用してオブジェクト自体にプロパティが存在するかどうかを確認できますが、それ自体では、プロパティが一度存在し、その後削除されたかどうかはわかりません。以下を使用して、独自のプロパティと継承されたプロパティに値があるかどうかをテストできます。
if (typeof obj.prop != 'undefined')
ただし、プロパティが存在するかどうかはわかりません。 undefined以外の値が割り当てられているかどうかだけです。プロパティが作成されているがプロパティが割り当てられていない場合でも、undefinedが返されることに注意してください。ほとんどの場合、これで十分です。
これを何に使いたいですか?ES5 では、 Object.createおよびObject.definePropertyを使用して削除不可能なプロパティを作成できますが、一部のブラウザーではサポートが不足しているため、一般的な Web には適していません。
プロパティがまだここにあるかどうかを定期的に確認することを除けば、削除演算子をオーバーライドすることはできません。それはできないと思います。
編集:これは 2012 年の正しい答えでした。現在では、プロキシを使用するのは明らかに簡単です。