プロトタイプを使用してマップ オブジェクトを拡張する方法がわかりません。お役に立てば幸いです。私はこのようなものを持っています:
var map = {'one':1, 'two':2};
キーの存在を確認する方法が必要です。
if (map.containsKey('one')){...}
マップ オブジェクトを拡張するにはどうすればよいですか?
プロトタイプを使用してマップ オブジェクトを拡張する方法がわかりません。お役に立てば幸いです。私はこのようなものを持っています:
var map = {'one':1, 'two':2};
キーの存在を確認する方法が必要です。
if (map.containsKey('one')){...}
マップ オブジェクトを拡張するにはどうすればよいですか?
Object.prototypeを変更することは危険です。これは、すべてのオブジェクトに影響を及ぼし、通常、使用している可能性のある他のライブラリを破壊するためです。一般に、辞書のようなオブジェクトにメソッドを追加する場合は、Prototype Hashオブジェクトのように、ハッシュインスタンスが継承するオブジェクトを作成する必要があります。
この特定のインスタンスでは、実際にはまたはのいずれif (key in map)
かを使用する必要がありますif (map.hasOwnProperty(key))
。
オブジェクト内のキーの存在をテストするためのオペレーターがすでに存在します。
(JavaScriptでは、オブジェクトはマップとして実装されるため、実際には実際のマップはありません。)
if( 'one' in map )
{
alert(map['one']);
}
他の人が言っObject.prototype
たように、コードを知らない人が書いたコードでうまく動作する必要がある場合、拡張は良い考えではないかもしれませんhasOwnProperty()
。
とにかく、プロパティが利用可能かどうかを確認するために私が知っている3つの「正しい」方法があります。
obj.hasOwnProperty(name)
指定された名前のプロパティがオブジェクトに存在するかどうかを確認します。
name in obj
さらに、オブジェクトのプロトタイプ チェーンを介して継承されたプロパティが含まれます。
typeof obj[name] !== 'undefined'
false
は、プロパティが存在するが に設定されているかどうかをさらに評価しundefined
ます。
一部の非 JS オブジェクト ( window.external
IE など) は を実装hasOwnProperty()
していない可能性があるため、他のチェックのいずれかを使用する必要があります。