Was immer Sie tun, vermeiden obj .constructor.name oder eine beliebige Zeichenfolgenversion des Konstruktors. Das funktioniert gut, bis Sie Ihren Code verunstalten/minify, dann alle Pausen, da der Konstruktor etwas obskuren umbenannt wird (zB: ‚n‘) und der Code wird dies immer noch tun und nie passen:
// 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') {}
Hinweis:
// Even if uglified/minified, this will work since SomeObject will
// universally be changed to something like 'n'.
if (obj instanceof SomeObject) {}
(BTW, ich brauche relativ hohe Ansehen auf den anderen würdigen Antworten kommentieren hier)
Tatsächlich geht es zurück in den frühesten JavaScript-Version in Netscape 2.0. (Ein weiterer Grund, nicht mit ECMA-262 zu verlinken, ist, dass es erstaunlich unklar und unlesbar ist, sogar nach Standards - Dokumentstandards!) – bobince
@bobince: Es braucht etwas, um sich an den Stil zu gewöhnen. :-) –
@bobince: Mit Blick auf die ES6-Spezifikation ... nun ... sagen wir einfach, dass ich jetzt aktiv nach den glorreichen Tagen der Klarheit in der ES5-Spezifikation sehne. :-) –