はい、どちらも同じことを行います。どちらもプロトタイプチェーンをトラバースして、その中の特定のオブジェクトを探します。
両方の違いは、それらが何であるか、およびそれらをどのように使用するかです。たとえば、isPrototypeOf
はオブジェクトで使用可能な関数です。このメソッドはで定義されているため、特定のオブジェクトが別のオブジェクトのプロトタイプチェーンにあるObject.prototype
かどうかをテストできます。すべてのオブジェクトで使用できます。Object.prototype
instanceof
は演算子であり、オブジェクトとコンストラクター関数の2つのオペランドが必要です。渡された関数prototype
プロパティがオブジェクトのチェーンに存在するかどうかをテストします([[HasInstance]](V)
内部操作を介して、関数オブジェクトでのみ使用可能)。
例えば:
function A () {
this.a = 1;
}
function B () {
this.b = 2;
}
B.prototype = new A();
B.prototype.constructor = B;
function C () {
this.c = 3;
}
C.prototype = new B();
C.prototype.constructor = C;
var c = new C();
// instanceof expects a constructor function
c instanceof A; // true
c instanceof B; // true
c instanceof C; // true
// isPrototypeOf, can be used on any object
A.prototype.isPrototypeOf(c); // true
B.prototype.isPrototypeOf(c); // true
C.prototype.isPrototypeOf(c); // true