Como enganar a instância

instanceofprocura o constructor.prototype na cadeia de protótipos do objeto fornecido. Portanto, ao compreender a herança prototípica, podemos manipular essa comparação.

n = new Number()
n
instanceof Number # true
n
.__proto__ = String.prototype
n
instanceof Number # false
n
.instanceof String # true

Isso se torna útil ao escrever testes para uma instanceofverificação de um objeto complexo que você não deseja recriar para o teste. Um exemplo de método e especificações Jasmine para ele estão abaixo:

checkObject (input) ->
if input instanceof ObjectA
'its ObjectA!'
else if input instanceof ObjectB
'its ObjectB!'


describe
'checkObject', ->
it
'returns correctly based on object passed' , ->
o
= {}.__proto__ = ObjectA.prototype
expect
(checkObject o).toEqual 'its ObjectA!'

o
= {}.__proto__ = ObjectB.prototype
expect
(checkObject o).toEqual 'its ObjectB!'