Object.prototype.isPrototypeOf()
O método isPrototypeOf()
checa se um objeto existe em na cadeia de protótipos de um outro objeto.
Nota: isPrototypeOf()
difere do operador instanceof
. Na expressão "objeto instanceof UmaFuncaoQualquer
", a cadeia de protótipos do objeto
é comparada com UmaFuncaoQualquer.prototype
, e não com a própria função UmaFuncaoQualquer
.
Experimente
Sintaxe
prototypeObj.isPrototypeOf(objeto)
Parâmetros
objeto
-
Objeto no qual será feito uma busca na cadeia de protótipos.
Retorno
Um Boolean
indicando se prototypeObj está na cadeia de protótipos do objeto.
Erros possíveis
Descrição
O método isPrototypeOf()
lhe permite checar se um objeto está ou não na cadeia de protótipos (cadeia hieráquica) de um outro objeto.
Em outras palavras, você pode descobrir se um objeto x (já instanciado) é herdeiro de um objeto y.
Exemplos
Este exemplo demonstra que Baz.prototype
, Bar.prototype
, Foo.prototype
e Object.prototype
estão na cadeia de protótipos de baz
, ou seja, baz herda atributos de Baz, Bar e Foo:
function Foo() {}
function Bar() {}
function Baz() {}
Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);
const foo = new Foo();
const bar = new Bar();
const baz = new Baz();
// cadeia de protótipos:
// foo: Foo <- Object
// bar: Bar <- Foo <- Object
// baz: Baz <- Bar <- Foo <- Object
console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Baz.prototype.isPrototypeOf(bar)); // false
console.log(Baz.prototype.isPrototypeOf(foo)); // false
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(foo)); // false
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(bar)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true
O métodoisPrototypeOf()
, junto com o operador instanceof
vêm a ser útil se você tem um código que só pode funcionar quando estiver lidando com objetos que descendem de uma cadeia de protótipos específicos, por exemplo, para garantir que certos métodos ou propriedades estarão presentes naquele objeto que você precisa.
Por exemplo, checar se o objeto baz
descende de Foo.prototype
:
if (Foo.prototype.isPrototypeOf(baz)) {
// fazer algo seguramente
}
Especificações
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.isprototypeof |
Compatibilidade com navegadores
BCD tables only load in the browser