instanceof
演算子は、オブジェクトが特定のクラスに属しているかどうかを確認することができます。 また、継承も考慮に入れます。
多くの場合、このようなチェックが必要な場合があります。 たとえば、ポリモーフィック関数を構築するために使用することができます。,
instanceof演算子
構文は次のとおりです。
obj instanceof Class
Blog
instanceof
演算子は、オブジェクトが特定のクラスに属しているかどうかを確認することができます。 また、継承も考慮に入れます。
多くの場合、このようなチェックが必要な場合があります。 たとえば、ポリモーフィック関数を構築するために使用することができます。,
構文は次のとおりです。
obj instanceof Class
true
obj
がiv id=”d334a9ffd6″に属している場合、true
を返します。div>
またはそれを継承するクラス。,
例えば:
class Rabbit {}let rabbit = new Rabbit();// is it an object of Rabbit class?alert( rabbit instanceof Rabbit ); // true
コンストラクタ関数でも動作します。
// instead of classfunction Rabbit() {}alert( new Rabbit() instanceof Rabbit ); // true
…また、Array
のような組み込みクラスでは、
let arr = ;alert( arr instanceof Array ); // truealert( arr instanceof Object ); // true
arr
もクラス。, これは、Array
がプロトタイプでObject
から継承するためです。
通常、instanceof
はチェックのためにプロトタイプチェーンを調べます。 静的メソッドSymbol.hasInstance
でカスタムロジックを設定することもできます。,
obj instanceof Class
のアルゴリズムは、おおよそ次のように機能します。
rabbit instanceof Animal
Animal.prototype
と比較するものの図は次のとおりです。
ところで、メソッドobjaもあります。isPrototypeOf(objB)は、true
objA
がobjB
のプロトタイプチェーンのどこかにある場合、true
を返します。, したがって、obj instanceof Class
のテストは、Class.prototype.isPrototypeOf(obj)
と言い換えることができます。
それは面白いですが、Class
コンストラクタ自体はチェックに参加しません! プロトタイプのチェーンとClass.prototype
のみが重要です。
これは、オブジェクトが作成された後にprototype
プロパティが変更されると、興味深い結果につながる可能性があります。
ここのように:
プレーンオブジェクトは:
let obj = {};alert(obj); // alert(obj.toString()); // the same
これは. しかし、隠された機能がありますtoString
実際にはそれよりもはるかに強力です。 これを拡張として使用できますtypeof
およびinstanceof
の代替として使用できます。
奇妙に聞こえる? 確かに。 分かりやすく説明しましょう。,
仕様により、組み込みのtoString
はオブジェクトから抽出し、他の値のコンテキストで実行できます。 そしてその結果はその値に依存します。ここでは、デコレータと転送の章で説明されているように呼び出しを使用し、関数objectToString
コンテキストthis=arr
を実行します。
内部的には、toString
アルゴリズムはthis
を調べ、対応する結果を返します。 その他の例:
オブジェクトtoString
の動作は、特別なオブジェクトプロパティSymbol.toStringTag
を使用してカスタマイズできます。
例:
let user = { : "User"};alert( {}.toString.call(user) ); //
ほとんどの環境固有のオブジェクトには、そのようなプロパティがあります。 ご覧のとおり、結果はまさにSymbol.toStringTag
(存在する場合)、にラップされます。,
最後に、プリミティブデータ型だけでなく、組み込みオブジェクトにも機能し、カスタマイズすることもできる”typeof on steroids”があります。
使用できます{}.toString.call
代わりにinstanceof
組み込みオブジェクトの型をチェックするのではなく文字列として取得し,4012″>
typeof
{}.toString
Symbol.toStringTag
instanceof
As we can see, {}.toString
is technically a “more advanced” typeof
.,
Andinstanceof
演算子は、クラス階層で作業していて、継承を考慮してクラスをチェックしたいときに本当に輝きます。
© 2021 Tombouctou
Theme by Anders Noren — Up ↑
コメントを残す