instanceof演算子は、オブジェクトが特定のクラスに属しているかどうかを確認することができます。 また、継承も考慮に入れます。
多くの場合、このようなチェックが必要な場合があります。 たとえば、ポリモーフィック関数を構築するために使用することができます。,
instanceof演算子
構文は次のとおりです。
obj instanceof Class
Blog
instanceof演算子は、オブジェクトが特定のクラスに属しているかどうかを確認することができます。 また、継承も考慮に入れます。
多くの場合、このようなチェックが必要な場合があります。 たとえば、ポリモーフィック関数を構築するために使用することができます。,
構文は次のとおりです。
obj instanceof Class
trueobjが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 AnimalAnimal.prototypeと比較するものの図は次のとおりです。
ところで、メソッドobjaもあります。isPrototypeOf(objB)は、trueobjAが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{}.toStringSymbol.toStringTag instanceofAs we can see, {}.toString is technically a “more advanced” typeof.,
Andinstanceof演算子は、クラス階層で作業していて、継承を考慮してクラスをチェックしたいときに本当に輝きます。
© 2021 Tombouctou
Theme by Anders Noren — Up ↑
コメントを残す