3

プロトタイプを使用してマップ オブジェクトを拡張する方法がわかりません。お役に立てば幸いです。私はこのようなものを持っています:

var map = {'one':1, 'two':2};

キーの存在を確認する方法が必要です。

if (map.containsKey('one')){...}

マップ オブジェクトを拡張するにはどうすればよいですか?

4

6 に答える 6

9

Object.prototypeを変更することは危険ですこれは、すべてのオブジェクトに影響を及ぼし、通常、使用している可能性のある他のライブラリを破壊するためです。一般に、辞書のようなオブジェクトにメソッドを追加する場合は、Prototype Hashオブジェクトのように、ハッシュインスタンスが継承するオブジェクトを作成する必要があります。

この特定のインスタンスでは、実際にはまたはのいずれif (key in map)かを使用する必要がありますif (map.hasOwnProperty(key))

于 2009-03-24T21:14:44.810 に答える
4

オブジェクト内のキーの存在をテストするためのオペレーターがすでに存在します。

(JavaScriptでは、オブジェクトはマップとして実装されるため、実際には実際のマップはありません。)

if( 'one' in map ) 
{
   alert(map['one']);
}
于 2009-03-24T21:18:12.507 に答える
0

他の人が言っObject.prototypeたように、コードを知らない人が書いたコードでうまく動作する必要がある場合、拡張は良い考えではないかもしれませんhasOwnProperty()

とにかく、プロパティが利用可能かどうかを確認するために私が知っている3つの「正しい」方法があります。

obj.hasOwnProperty(name)

指定された名前のプロパティがオブジェクトに存在するかどうかを確認します。

name in obj

さらに、オブジェクトのプロトタイプ チェーンを介して継承されたプロパティが含まれます。

typeof obj[name] !== 'undefined'

falseは、プロパティが存在するが に設定されているかどうかをさらに評価しundefinedます。

一部の非 JS オブジェクト ( window.externalIE など) は を実装hasOwnProperty()していない可能性があるため、他のチェックのいずれかを使用する必要があります。

于 2009-03-25T00:44:59.547 に答える