Object.prototype.isPrototypeOf()

Você está lendo a versão em inglês deste conteúdo porque ainda não há uma tradução para este idioma. Ajude-nos a traduzir este artigo!

O método isPrototypeOf() checa se um objeto existe em na cadeia de protótipos de um outro objeto.

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.

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

TypeError
Um TypeError é mostrado se prototypeObj é undefined ou null.

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.prototypeFoo.prototype eObject.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);

var baz = new Baz();

console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // 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
}

Specificações

Especificação Status Comment
ECMAScript 3rd Edition (ECMA-262) Padrão Initial definition.
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.prototype.isPrototypeOf' in that specification.
Padrão  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.prototype.isPrototypeOf' in that specification.
Padrão  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.prototype.isPrototypeOf' in that specification.
Rascunho  

Compatibilidade com o Browser

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
isPrototypeOfChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 9Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support

Veja também