Dù bạn làm gì, tránh obj .constructor.name hoặc bất kỳ phiên bản chuỗi nào của hàm tạo. Đó là hoạt động tuyệt vời cho đến khi bạn làm xấu đi/rút gọn mã của bạn, sau đó nó tất cả phá vỡ kể từ khi các nhà xây dựng được đổi tên thành một cái gì đó mơ hồ (ví dụ: 'n') và mã của bạn vẫn sẽ làm điều này và không bao giờ phù hợp:
// Note: when uglified, the constructor may be renamed to 'n' (or whatever),
// which breaks this code since the strings are left alone.
if (obj.constructor.name === 'SomeObject') {}
Lưu ý:
// Even if uglified/minified, this will work since SomeObject will
// universally be changed to something like 'n'.
if (obj instanceof SomeObject) {}
(BTW, tôi cần danh tiếng cao hơn để nhận xét về câu trả lời xứng đáng khác ở đây)
Thật vậy, nó đi lại cho JavaScript phiên bản sớm nhất trong Netscape 2.0. (Một lý do khác không liên kết với ECMA-262 là nó không rõ ràng và không đọc được, ngay cả theo tiêu chuẩn tài liệu tiêu chuẩn!) – bobince
@bobince: Phải mất một số làm quen với phong cách. :-) –
@bobince: Nhìn vào thông số ES6 ... tốt ... chúng ta hãy nói rằng bây giờ tôi đang tích cực pining cho những ngày vinh quang của sự rõ ràng trong spec ES5. :-) –