2 của tôi! Thực sự, một phần lý do tôi ném nó lên đây, mặc dù có một danh sách dài các câu trả lời, là để cung cấp một all in one
giải pháp loại nhỏ hơn và nhận lại một số phản hồi trong tương lai về cách mở rộng nó để bao gồm nhiều hơn real types
.
Với giải pháp sau đây, như đã nói ở trên, tôi đã kết hợp một vài giải pháp được tìm thấy ở đây, cũng như kết hợp một bản sửa lỗi để trả về giá trị của jQueryđối tượng được xác định jQuery nếu có . Tôi cũng nối thêm phương thức vào nguyên mẫu Object gốc. Tôi biết điều đó thường là điều cấm kỵ, vì nó có thể can thiệp vào các phần mở rộng khác như vậy, nhưng tôi để điều đó user beware
. Nếu bạn không thích cách làm này, chỉ cần sao chép hàm cơ sở ở bất cứ đâu bạn thích và thay thế tất cả các biến this
bằng tham số đối số để truyền vào (chẳng hạn như đối số [0]).
;(function() { // Object.realType
function realType(toLower) {
var r = typeof this;
try {
if (window.hasOwnProperty('jQuery') && this.constructor && this.constructor == jQuery) r = 'jQuery';
else r = this.constructor && this.constructor.name ? this.constructor.name : Object.prototype.toString.call(this).slice(8, -1);
}
catch(e) { if (this['toString']) r = this.toString().slice(8, -1); }
return !toLower ? r : r.toLowerCase();
}
Object['defineProperty'] && !Object.prototype.hasOwnProperty('realType')
? Object.defineProperty(Object.prototype, 'realType', { value: realType }) : Object.prototype['realType'] = realType;
})();
Sau đó, chỉ cần sử dụng một cách dễ dàng, như vậy:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Lưu ý: Có 1 đối số có thể qua được. Nếu là bool của true
, thì lợi nhuận sẽ luôn ở dạng chữ thường .
Thêm ví dụ:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Nếu bạn có bất cứ điều gì để thêm có thể hữu ích, chẳng hạn như xác định khi nào một đối tượng được tạo bằng thư viện khác (Moo, Proto, Yui, Dojo, v.v.), vui lòng bình luận hoặc chỉnh sửa nội dung này và giữ cho nó sẽ được nhiều hơn chính xác và chính xác. HOẶC lăn qua cái GitHubtôi làm cho nó và cho tôi biết. Bạn cũng sẽ tìm thấy một liên kết nhanh đến một tệp cdn min ở đó.
typeof new RegExp(/./); // "function"
trong Chrome dường như đã được khắc phục trong Chrome 14.