翻訳者から:翻訳者の分野は私にとって新しいので、厳密に判断しないようお願いします。Nicholas Zakasによるオブジェクト指向JavaScriptの原則を読んだ後、
Object.create()を使用して
nullから継承されたオブジェクトを作成することについてのアドバイスに出会いました
。 そのようなオブジェクトは
Object.prototypeを継承しないため、
Object.prototypeメソッドを持ちません。
Zakazは、これを使用して安全な
キャッシュオブジェクトを作成できると提案しました。 私はこのアイデアが本当に好きでしたが、
MDN (
Mozilla Developer Network )によると、
Object.create()は IE9までサポートされていません。 ただし、サーバー上の
Node.jsでは、このメソッドは完全にサポートされています。
JavaScriptでオブジェクトを作成すると、このオブジェクトは
Object.prototypeメソッドを自動的に継承します。 このため、オブジェクトは
、「 in 」演算子を使用してキーの存在を
確認するために「危険」になり
ます。この場合、「
valueOf 」や「
toString 」などのオブジェクトメソッドがあるためです(プロトタイプの階層を登った結果)。 したがって、人々
は「 in 」演算子の代わりにObject.prototype.hasOwnProperty()を
使用することを好みます。
ただし、
Object.create()を使用して
nullから継承されたオブジェクトを作成する場合、継承階層はありません。 そのため、このオブジェクトは、システムによって事前定義されたメソッドを含まないオブジェクトに非常に近くなります。
仕組みを確認するには、次の
Node.jsスクリプトをご覧ください。
このスクリプトを実行すると、次の結果が得られます。
[ hasOwnProperty ] exists: false [ toString ] exists: false [ valueOf ] exists: false [ constructor ] exists: false [ __proto__ ] exists: true
ご覧のとおり、
Object.prototypeのすべての「標準」プロパティ
が欠落しています。 存在する唯一の魔法のプロパティは
__proto__です。 これにより、与えられたオブジェクトのキーを盲目的に追加、削除、およびチェックする最も近い機会が得られます。 これは、可能な限り単純なコードの可能性に対するリスクの許容レベルだと思います。
もちろん、「単純なコード」と言っても、違いはそれほど重要ではありません。 特定の何かを見るために、キーと値のペアのストレージをカプセル化する最も単純なキャッシュクラスを作成しようとしました。 最初のクラスは、
nullから継承したオブジェクトに実装されたストレージです。 2番目のクラスは、通常の
JavaScriptオブジェクトに実装されたリポジトリです。
このコードを一目見ただけでも、違いに気付かないかもしれません。 しかし、それは
get ()メソッドと
has()メソッドにあります。
正直に言うと、キャッシュの実装をカプセル化する場合、最も信頼性の高い
.hasOwnProperty()または、たとえば、混合キーを使用できます。 ただし、不完全なキャッシュで作業していない場合、
nullから継承されたオブジェクトを使用することは、コードの単純さとリスクのバランスをとる合理的な方法です。 上記のいずれにも当てはまらない場合、
nullから継承したオブジェクトを
JavaScript /
Node.jsで作成できることを知っておくと便利です
。