IsPrototypeOfとのinstanceofの違い

IsPrototypeOfと落ち込んINSTANCEOFの違いについて多くを読んだり、慎重に、より明確にMDNに提示理解:

彼らは同じことを行う、2はその内の特定のオブジェクトを探してプロトタイプチェーンをトラバース

isPrototypeOf() メソッドは、オブジェクトが別のオブジェクトのプロトタイプチェーン上に存在するかどうかをテストするために使用されます。

 
構文:prototypeObj.isPrototypeOf(オブジェクト)
パラメーター:オブジェクトのプロトタイプチェーン上のオブジェクト検索
戻り値:ブール、別のオブジェクトのプロトタイプチェーン内の呼び出し元のオブジェクトかどうかを示します。

説明:isPrototypeOfメソッドを使用すると、別のオブジェクトのプロトタイプチェーン上のオブジェクトに存在するかどうかを確認することができます。

例えば、次のプロトタイプチェーン検討:

関数料(){ 
  // ... 
} 

関数fi(){ 
  // ... 
} 
Fi.prototype新しい新しい料金=()は、

関数Foを(){ 
  // ... 
} 
Fiの=新しい新しいFo.prototype()

関数FUM(){ 
  // ... 
} 
Fum.prototype新しい新しいFoを=(); 
Fi.prototypeは、試作例にチェーンの有無を検出する例を次のFUMを作成します。

FUM新しい新しいFUM = VAR(); 
... 

IF(Fi.prototype.isPrototypeOf(FUM)){ 
  //何か安全な操作を行います
}
 

instanceof オペレータは、オブジェクトがコンストラクタでプロトタイプチェーンが存在するかどうかをテストするために使用され  prototype 、それは2つのオペランド、目標とすることが望ましいオペレータである、特性をコンストラクタ関数、伝達関数プロトタイプ特性がテスト中に存在しますオブジェクト上の鎖(を通じて[[HasInstance]](V)内部動作、関数がオブジェクトでのみ利用可能です)。

 
構文:instanceofのオブジェクトコンストラクタ

パラメータ:検出すべきオブジェクトをオブジェクトコンストラクタコンストラクタで

説明:instanceof演算子は、オブジェクトパラメータのプロトタイプconstructor.prototypeチェーンの存在または非存在を検出するために使用されます。
//コンストラクタ定義
関数C(){} 
関数D(){} 

VAR新しい新しいC = Oを(); 

//真に、なぜならObject.getPrototypeOf(O)=== C.prototype 
のinstanceofのC O; 

// falseに、プロトタイプチェーンD.prototypeないO、ため
;のinstanceofのD O 

のinstanceofオブジェクトO; // trueに、Object.prototype.isPrototypeOf(O)がtrueに返すため
、上記C.prototype真//へのinstanceofオブジェクトを

C.prototype = {}; 
新しい新しいO2 = CのVAR(); 

O2のinstanceofのC; // trueに

//偽、C.prototypeポイントに空のオブジェクトに、オブジェクトが空のプロトタイプチェーンOではない;のinstanceofのC O。

)D.prototype新しい新しいC(= ; //継承 
するvar O3 =新しいD();
O3のinstanceof Dを; //真 
C instanceofはO3; //真の
注意式はFooのinstanceofはobjをtrueを返す場合、プロパティの値がFoo.prototypeする可能性を秘めているので、それは式が常にtrueを返しますという意味ではありません、ということ変更の可能性が高いプロトタイプチェーンOBJ上に存在しないの後に値を変更し、その後、元の式の値が偽となります。
また、一つのケースでは、状況が変わります、元の式の値は、現在のES仕様で、我々は唯一のオブジェクトのプロトタイプは、それを変更しません読み取ることができますが、オブジェクトobjのプロトタイプチェーンを変更することであるが、非によって、標準の__proto__魔法の性質は、達成することができます。例えば後OBJ .__ proto__ = {}、OBJのinstanceof fooは偽を返します。
 

かおりは2間の主な違いがあるでしょう。

すなわち、X、YはYのプロトタイププロトタイプチェーン内にXか否かを判断するのinstanceofで、我々は、instanceofのX Y X Yがいるかどうか判断される。すなわち、例えば、プロトタイプチェーン(__proto__)はプロトタイプにそのコンストラクタを向けられている知っています一例(彼は親クラスXであることXの例として、Yであれば、実施例)
及びX.isPrototypeOf(Y)は、オブジェクトがX-Y鎖のプロトタイプであるか否かを判定する、同じ継承関係X Y Xは、オブジェクトでありますチェーンのプロトタイプオブジェクトY、即ちX.isPrototypeOf(Y)XがYを継承するかどうかを判断します

彼らは同じことを行う、2はその内の特定のオブジェクトを探してプロトタイプチェーンをトラバース

isPrototypeOf() メソッドは、オブジェクトが別のオブジェクトのプロトタイプチェーン上に存在するかどうかをテストするために使用されます。

 
構文:prototypeObj.isPrototypeOf(オブジェクト)
パラメーター:オブジェクトのプロトタイプチェーン上のオブジェクト検索
戻り値:ブール、別のオブジェクトのプロトタイプチェーン内の呼び出し元のオブジェクトかどうかを示します。

説明:isPrototypeOfメソッドを使用すると、別のオブジェクトのプロトタイプチェーン上のオブジェクトに存在するかどうかを確認することができます。

例えば、次のプロトタイプチェーン検討:

関数料(){ 
  // ... 
} 

関数fi(){ 
  // ... 
} 
Fi.prototype新しい新しい料金=()は、

関数Foを(){ 
  // ... 
} 
Fiの=新しい新しいFo.prototype()

関数FUM(){ 
  // ... 
} 
Fum.prototype新しい新しいFoを=(); 
Fi.prototypeは、試作例にチェーンの有無を検出する例を次のFUMを作成します。

FUM新しい新しいFUM = VAR(); 
... 

IF(Fi.prototype.isPrototypeOf(FUM)){ 
  //何か安全な操作を行います
}
 

instanceof オペレータは、オブジェクトがコンストラクタでプロトタイプチェーンが存在するかどうかをテストするために使用され  prototype 、それは2つのオペランド、目標とすることが望ましいオペレータである、特性をコンストラクタ関数、伝達関数プロトタイプ特性がテスト中に存在しますオブジェクト上の鎖(を通じて[[HasInstance]](V)内部動作、関数がオブジェクトでのみ利用可能です)。

 
構文:instanceofのオブジェクトコンストラクタ

パラメータ:検出すべきオブジェクトをオブジェクトコンストラクタコンストラクタで

説明:instanceof演算子は、オブジェクトパラメータのプロトタイプconstructor.prototypeチェーンの存在または非存在を検出するために使用されます。
//コンストラクタ定義
関数C(){} 
関数D(){} 

VAR新しい新しいC = Oを(); 

//真に、なぜならObject.getPrototypeOf(O)=== C.prototype 
のinstanceofのC O; 

// falseに、プロトタイプチェーンD.prototypeないO、ため
;のinstanceofのD O 

のinstanceofオブジェクトO; // trueに、Object.prototype.isPrototypeOf(O)がtrueに返すため
、上記C.prototype真//へのinstanceofオブジェクトを

C.prototype = {}; 
新しい新しいO2 = CのVAR(); 

O2のinstanceofのC; // trueに

//偽、C.prototypeポイントに空のオブジェクトに、オブジェクトが空のプロトタイプチェーンOではない;のinstanceofのC O。

)D.prototype新しい新しいC(= ; //継承 
するvar O3 =新しいD();
O3のinstanceof Dを; //真
//真; O3のinstanceof Cの
値は、注意すべきで、それはFooがtrueを返すのinstanceof OBJ表現は、それがプロパティの値がFoo.prototypeが変更される可能性があるため式は常に変更後、trueを返すことを意味していない場合プロトタイプチェーンOBJ上に存在しない可能性が高い、その後、元の式の値が偽となります。
また、一つのケースでは、状況が変わります、元の式の値は、現在のES仕様で、我々は唯一のオブジェクトのプロトタイプは、それを変更しません読み取ることができますが、オブジェクトobjのプロトタイプチェーンを変更することであるが、非によって、標準の__proto__魔法の性質は、達成することができます。例えば後OBJ .__ proto__ = {}、OBJのinstanceof fooは偽を返します。
 

かおりは2間の主な違いがあるでしょう。

すなわち、X、YはYのプロトタイププロトタイプチェーン内にXか否かを判断するのinstanceofで、我々は、instanceofのX Y X Yがいるかどうか判断される。すなわち、例えば、プロトタイプチェーン(__proto__)はプロトタイプにそのコンストラクタを向けられている知っています一例(彼は親クラスXであることXの例として、Yであれば、実施例)
及びX.isPrototypeOf(Y)は、オブジェクトがX-Y鎖のプロトタイプであるか否かを判定する、同じ継承関係X Y Xは、オブジェクトでありますチェーンのプロトタイプオブジェクトY、即ちX.isPrototypeOf(Y)XがYを継承するかどうかを判断します

おすすめ

転載: www.cnblogs.com/yu412/p/11550951.html