我的2美分!确实,尽管答案很长,但我在这里提出这个问题的部分原因是为了提供更多all in one
类型的解决方案,并在将来获得一些反馈,以了解如何扩展它以包含更多内容real types
。
如前所述,通过以下解决方案,我结合了此处找到的几个解决方案,并结合了一个修复程序,用于jQuery在jQuery定义的对象(如果有)上返回值。我还将方法附加到本机Object原型。我知道这通常是禁忌,因为它可能会干扰其他此类扩展,但我将其留给了user beware
。如果您不喜欢这种方式,只需将基础函数复制到任何您喜欢的地方,然后将所有的变量替换为this
要传递的参数参数(例如arguments [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;
})();
然后只需轻松使用,就像这样:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
注意:有1个参数可传递。如果是布尔值true
,则返回值总是小写。
更多示例:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
如果您有什么补充可能对您有所帮助,例如定义何时使用其他库(Moo,Proto,Yui,Dojo等)创建对象,请随时进行注释或编辑,并将其保持下去。准确而精确。或滚动到GitHub我为此所做的事情,并让我知道。您还可以在此处找到指向CDN分钟文件的快速链接。
typeof new RegExp(/./); // "function"
在Chrome中的问题似乎被固定在Chrome 14