Una funzione chiamata come un costruttore (con l'operatore new
) sarà sempre restituire un'istanza meno restituisce esplicitamente un oggetto. È quindi possibile restituire un oggetto vuoto, e utilizzare l'operatore instanceof
per controllare quali è tornato:
function Monster(name, hp) {
if (hp < 1) {
return {};
}
else {
this.name = name;
}
}
var theMonster = new Monster("Sulley", -5);
console.log(theMonster instanceof Monster); // false
Questo comportamento è spiegato nella specifica (13.2.2):
8. Let risultato essere il risultato di chiamare la proprietà interna [[Call]] di F, fornendo obj come questo valore e fornendo l'elenco degli argomenti passato in [[Construct]] come args.
9. Se Tipo (risultato) è Oggetto, restituire il risultato.
10. Oggetto di reso.
Tuttavia, come altri hanno sottolineato, se si dovrebbe effettivamente fare questo è discutibile.
fonte
2013-03-12 07:59:59
Perché non spostate le vostre condizioni al di fuori della funzione 'Mostro'? Non puoi comunque usare 'theMonster' se non vuoi che sia un oggetto. Si potrebbe aggiungere 'this.isMonster = (hp> = 1);' alla funzione 'Mostro'. – Amberlamps
lancia un'opzione di eccezione? –