Да, они делают одно и то же, оба просматривают цепочку прототипов, ища в ней определенный объект.
Разница между ними в том, что они , и то, как вы их используете, например. isPrototypeOf
- это функция , доступная для объекта Object.prototype
, она позволяет проверить, находится ли определенный объект в цепочке прототипов другого, поскольку этот метод определен в Object.prototype
, он доступен для всех объектов.
instanceof
является оператором и ожидает двух операндов, объекта и функции-конструктора , он проверит, передана ли функция prototype
свойство существует в цепочке объекта (через внутреннюю операцию [[HasInstance]](V)
, доступно только в объектах Function).
Например:
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