JavaScriptのinstanceof_javascriptスキルの内部機構の解析
例:
// コード 1
function Pig( ) {}
var pig = new Pig();
alert(pig instanceof Pig) // => true
function FlyPig() {}
FlyPig .prototype = new Pig();
var flyPig = new FlyPig();
alert(flyPiginstanceof Pig); // => 別のコードを見てください。 :
alert(pig instanceof Pig); // =>
上記の豚豚はなぜ豚ではなくなったのですか?
オブジェクトがクラスのインスタンスである場合、それはオブジェクトがクラスのメソッドとプロパティを持つことを意味します。 JavaScript では、ブタの特徴がプロトタイプに反映されます:
コードをコピー
"长膘": function() {}
};
var pig();
alert(pig instanceof Pig); 🎜>
豚の特性が動的に変更され、豚が牛になる場合:
alert(pig instanceof Pig); //=> ; true
Pig のプロトタイプが変更されていない場合、pig は依然として pig であるため、コード 3 の pig は Pig のインスタンスです。プロトタイプを変更した後、豚は豚ではなくなり、豚の皮をかぶった牛になりました。したがって、コード 4 では、 pig は Pig のインスタンスではなくなりますが、niu は Pig のインスタンスになります。
さらに分析する前に、new の内部メカニズムを確認してみましょう。コード 2 の new Pig() は、実際には次と同等です:
コードをコピーします
コードは次のとおりです:
})() ;
2 行目で、o.__proto__ が Pig.prototype が指す値を指していることがわかります。ただし、4 行目では、Pig.prototype は新しい値を指しています。つまり、5 行目が返されると、 pig.__proto__ !== Pig.prototype になります。この変更により、コード 2 の pig が Pig ではなくなると推測できます。instanceof が pig を決定します。 Pig かどうかの基準は次のとおりです: 非表示の pig.__proto__ 属性が Pig.prototype と等しいかどうかを確認してください。
さらに確認するには、Firefox でのinstanceof の内部実装コードをシミュレートできます:
コードをコピーします
コードは次のとおりです:
//instanceof の右側のオペランドは関数オブジェクトである必要があります
if(typeof cls != = "function") {
throw new Error ("invalidinstanceof operand(" cls ")");
}
// バックトラック判定
var p = obj.__proto__, cp = cls.prototype;
while(p ) {
if(p === cp) return true;
p = p.__proto__;
テストページ:simulate-intanceof.html
最後に全員をテストします:
コードをコピーします
コードは次のとおりです:
function Bird() {}
varbird = new Bird();
var o = {}; __proto__ = o;

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









instanceof の機能は、オブジェクトが特定のクラスのインスタンスであるかどうか、またはオブジェクトが特定のインターフェイスを実装しているかどうかを判断することです。 instanceof は、オブジェクトが指定されたタイプであるかどうかを確認するために使用される演算子です。 instanceof 演算子の使用シナリオ: 1. 型チェック: オブジェクトの特定の型を判断し、異なる型に応じて異なるロジックを実行するために使用できます; 2. インターフェイスの判断: オブジェクトがインターフェイスを実装しているかどうかを判断するために使用できます。 、オブジェクトがインターフェイスを実装しているかどうかを判断するため、インターフェイスの定義は対応するメソッドを呼び出します; 3. 下方変換など。

概念 1. この演算子は、オブジェクトを操作し、オブジェクトが特定のタイプ (タイプまたはインターフェース・タイプ) であるかどうかを確認するために使用されます。形式 2. 計算機の左側の変数が指すオブジェクトが演算子の右側のクラスまたはインターフェイスのオブジェクトである場合、結果は true になります。 (Objectreferencevariable)instanceof(class/interfacetype) インスタンス packagecom.verify_instanceof;publicclassTestInstanceOf{publicstaticvoidmain(String[]args){//次の 4 行のコードは、instanceof を証明するために使用されます。

Instanceof は JavaScript の演算子で、コンストラクターの "prototype" 属性がオブジェクトのプロトタイプ チェーンのどこかに現れるかどうかを検出するために使用されます。構文は "object instanceof constructionor" です。ここで、object は検出されるオブジェクト、constructor は検出されるオブジェクトです。検出するオブジェクト。チェックするコンストラクター。

Java では、instanceof は、オブジェクトがクラスのインスタンスであるか、クラスのサブクラスのインスタンスであるかをチェックするために使用される二項演算子です。その構文は「オブジェクト インスタンスオブ クラス」です。ここで、オブジェクトはオブジェクト引用符、クラスはクラスです名前またはインターフェイス名。

その理由は次のとおりです。instanceof 演算子は、オブジェクトが特定のクラス (またはその派生クラス) のインスタンスであるかどうかを確認するために使用されます。オブジェクトがクラスのインスタンスではない場合、型を決定できず、エラーがスローされます。このエラーを回避するには、instanceof 演算子を使用するときに、オブジェクトがクラスのインスタンスであることを確認する必要があります。オブジェクトのタイプがわからない場合は、他の方法を使用してタイプを判断できます。

この演算子はオブジェクト参照変数にのみ使用されます。この演算子は、オブジェクトが特定の型 (クラス型またはインターフェイス型) に属しているかどうかを確認します。 instanceof 演算子は -(Objectreferencevariable)instanceof(class/interfacetype) のように記述されます。演算子の左側の変数によって参照されるオブジェクトが右側のクラス/インターフェイス型の IS-A チェックに合格した場合、結果は次のようになります。本当だ。以下は例です - ライブ デモンストレーションの例 publicclassTest{ publicstaticvoidmain(Stringargs[]){&nbs

instanceof 演算子を使用してオブジェクトの型をチェックする場合、結果が true の場合、そのオブジェクトは指定された型のインスタンスであることを意味します。ただし、コンパイラはオブジェクトを指定された型に自動的に変換しないため、キャストが必要です。キャストは、オブジェクトをある型から別の型に変換する操作です。 instanceof 演算子を使用した後、オブジェクトが指定された型のインスタンスであると判断し、その型を操作したい場合は、キャスト型変換を実行する必要があります。

instanceof を使用しない理由は次のとおりです: 1. 使用しているプログラミング言語は、instanceof 演算子をサポートしていない可能性があります; 2. 他のメソッドを使用した方が要件をよりよく達成できると考えているため、場合によっては、他のメソッドを使用してオブジェクト タイプをチェックすると、より効果的である、またはニーズにより適している; 3. instanceof 演算子の使用方法に慣れていない、またはその動作が不明である; 4. 場合によっては、「instanceof」の使用が最良の選択ではない可能性があります。
