Sí, hacen lo mismo, ambos recorren la cadena del prototipo buscando un objeto específico en ella.
La diferencia entre ambos es lo que son, y cómo los usa, p. Ej. la isPrototypeOf
es una función disponibles en el objeto Object.prototype
, que le permite probar si un objeto específico se encuentra en la cadena de prototipo del otro, ya que se define este método en Object.prototype
, es estar disponible para todos los objetos.
instanceof
es un operador y espera dos operandos, un objeto y un Constructor function, probará si la función pasado existe prototype
propiedad en la cadena del objeto (a través de la operación interna [[HasInstance]](V)
, disponible únicamente en objetos de función)
Por ejemplo:
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
Si bien siempre puedes usar 'instanceof' (con constructores en el RHS), no todos los objetos pueden heredar de' Object.prototype'. 'Object.create (null) instanceof Something' y' ({}). InstanceOf ({prototype: Something.prototype}) 'funcionará (y generará' false') donde fallaría el reverso. – Bergi