2016-03-19 13 views
6

perdonarmi se mi sbaglio, ma ho pensato che in questo modo:JavaScript - instanceof non fare quello che mi aspetto

function MyObject() 
{ 
    return { 
     key: 'value', 
     hello: function() { console.log('world'); } 
    }; 
} 

var obj = new MyObject(); 

creo una nuova istanza della MyObject tipo.

Tuttavia, se faccio questo:

obj instanceof MyObject 

Restituisce falso. Questo mi confonde, poiché pensavo che ciò avrebbe restituito true.

Cosa sto facendo di sbagliato qui?

Ecco uno fiddle che verifica questo.

Ho pensato che avrei introdotto le basi di JavaScript, ma forse no. Tuttavia, ho trovato sources che contraddice le mie scoperte.

risposta

9

Se si restituisce esplicitamente un oggetto da una funzione di costruzione (come si fa qui), si ottiene quell'oggetto invece di un'istanza del costruttore.

Se si voleva ottenere un'istanza del costruttore, allora si dovrebbe fare questo:

function MyObject() 
{ 
    this.key = 'value'; 
    this.hello = function() { console.log('world'); }; 
} 

(Anche se, in generale, che ci si vuole mettere metodi sul prototipo invece di generare duplicati di loro ogni volta che costruisci una nuova istanza).

Problemi correlati