Một chức năng gọi là một nhà xây dựng (với các nhà điều hành new
) sẽ luôn luôn trở về một thể trừ nó một cách rõ ràng trả về một đối tượng. Do đó bạn có thể trả về một đối tượng rỗng, và sử dụng các nhà điều hành instanceof
để kiểm tra những gì trở lại:
function Monster(name, hp) {
if (hp < 1) {
return {};
}
else {
this.name = name;
}
}
var theMonster = new Monster("Sulley", -5);
console.log(theMonster instanceof Monster); // false
Hành vi này được giải thích trong spec (13.2.2):
8. Hãy kết quả là kết quả của việc gọi thuộc tính bên trong [[Call]] của F, cung cấp obj làm giá trị này và cung cấp danh sách đối số được chuyển vào [[Construct]] là args.
9. Nếu loại (kết quả) là đối tượng thì kết quả trả về.
10. Trả lại obj.
Tuy nhiên, như những người khác đã chỉ ra, cho dù bạn thực sự nên làm điều này là có vấn đề.
Nguồn
2013-03-12 07:59:59
Tại sao bạn không di chuyển tình trạng của mình ra ngoài chức năng 'Quái vật'? Bạn không thể sử dụng 'theMonster' nếu bạn không muốn nó là một đối tượng. Bạn có thể thêm 'this.isMonster = (hp> = 1);' vào hàm 'Monster' của bạn. – Amberlamps
là ném một ngoại lệ một tùy chọn? –