Funkcja zwana jako konstruktor (z operatorem new
) będzie zawsze powrócić wystąpienie chyba że wyraźnie zwraca się obiekt. Można zatem powrócić pusty obiekt i użyć operatora instanceof
sprawdzić co wrócił:
function Monster(name, hp) {
if (hp < 1) {
return {};
}
else {
this.name = name;
}
}
var theMonster = new Monster("Sulley", -5);
console.log(theMonster instanceof Monster); // false
Takie zachowanie jest wyjaśnione w specyfikacji (13.2.2):
8. Niech wynik być rezultatem wywoływania wewnętrznej właściwości F, podając obj jako wartość i dostarczając listę argumentów do [[Konstrukcja]] jako args.
9. Jeśli Typ (wynik) to Obiekt, to zwróć wynik.
10. Powrót obj.
Jednak, jak podkreślali inni, to, czy rzeczywiście należy to robić, jest wątpliwe.
Dlaczego nie przenosisz swojego stanu poza funkcję "Potwora"? W każdym razie nie możesz użyć 'theMonster', jeśli nie chcesz, aby był obiektem. Możesz dodać 'this.isMonster = (hp> = 1);' do swojej funkcji 'Monster'. – Amberlamps
rzuca wyjątek opcja? –