Meine 2 ¢! Wirklich, ein Teil des Grundes, warum ich dies hier trotz der langen Liste von Antworten vorwerfe, besteht darin, eine etwas all in one
typischere Lösung bereitzustellen und in Zukunft Feedback zu erhalten, wie man sie erweitern kann, um mehr aufzunehmen real types
.
Wie oben erwähnt, habe ich mit der folgenden Lösung einige der hier gefundenen Lösungen kombiniert und einen Fix für die Rückgabe eines Werts für ein von jQueryjQuery definiertes Objekt integriert, sofern verfügbar . Ich hänge die Methode auch an den nativen Objektprototyp an. Ich weiß, dass das oft tabu ist, da es andere solche Erweiterungen stören könnte, aber das überlasse ich user beware
. Wenn Ihnen diese Vorgehensweise nicht gefällt, kopieren Sie einfach die Basisfunktion an eine beliebige Stelle und ersetzen Sie alle Variablen von this
durch einen zu übergebenden Argumentparameter (z. B. Argumente [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;
})();
Dann einfach mit Leichtigkeit verwenden, so:
obj.realType() // would return 'Object'
obj.realType(true) // would return 'object'
Hinweis: Es ist 1 Argument passabel. Wenn bool of ist true
, wird die Rückgabe immer in Kleinbuchstaben angegeben .
Mehr Beispiele:
true.realType(); // "Boolean"
var a = 4; a.realType(); // "Number"
$('div:first').realType(); // "jQuery"
document.createElement('div').realType() // "HTMLDivElement"
Wenn Sie etwas hinzufügen möchten, das möglicherweise hilfreich ist, z. B. das Definieren, wann ein Objekt mit einer anderen Bibliothek erstellt wurde (Moo, Proto, Yui, Dojo usw.), können Sie dies gerne kommentieren oder bearbeiten, damit es weitergeht genau und präzise. ODER rollen Sie zu dem, den GitHubich dafür gemacht habe, und lassen Sie es mich wissen. Dort finden Sie auch einen schnellen Link zu einer cdn min-Datei.
typeof new RegExp(/./); // "function"