Mon 2 ¢! Vraiment, une partie de la raison pour laquelle je lance ceci ici, malgré la longue liste de réponses, est de fournir un peu plusall in one
solution de type et d'obtenir des informations à l'avenir sur la façon de l'étendre pour en inclure davantage real types
.
Avec la solution suivante, comme mentionné ci-dessus, j'ai combiné quelques solutions trouvées ici, ainsi que l'incorporation d'un correctif pour renvoyer une valeur de l' jQueryobjet défini sur jQuery si disponible . J'ajoute également la méthode au prototype d'objet natif. Je sais que c'est souvent tabou, car cela pourrait interférer avec d'autres extensions de ce type, mais je laisse cela àuser beware
. Si vous n'aimez pas cette façon de faire, copiez simplement la fonction de base où vous voulez et remplacez toutes les variables de this
par un paramètre d'argument à passer (comme les 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;
})();
Ensuite, utilisez simplement avec facilité, comme ceci:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Remarque: Il y a 1 argument passable. Si est bool detrue
, le retour sera toujours en minuscules .
Plus d'exemples:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Si vous avez quelque chose à ajouter qui peut être utile, comme définir quand un objet a été créé avec une autre bibliothèque (Moo, Proto, Yui, Dojo, etc ...), n'hésitez pas à commenter ou à modifier cela et à le garder plus précis et précis. OU passez à la GitHubje l' ai fait et faites le moi savoir. Vous y trouverez également un lien rapide vers un fichier cdn min.
typeof new RegExp(/./); // "function"
problème dans Chrome semble être résolu dans Chrome 14.