A continuación se muestra un fragmento de código evaluado en la consola de Chrome. Un constructor de funciones se crea de forma anónima y se utiliza para construir un objeto. Chrome felizmente imprime el nombre del constructor real 'Foo'. Pero no puedo encontrar una manera de obtenerlo usando JS estándar. ¿Dónde está la magia?
> var exports = {} undefined > (function(){var Foo = function() {}; Foo.prototype = ""; exports.bar = Foo;})() undefined > obj = new exports.bar(); Foo {} > obj.constructor.name 'Object' > obj.__proto__ {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …} > obj.__proto__.name undefined > obj Foo {}Para obtener Foo puedes exports.bar.name
if (obj.__proto__.isPrototypeOf(exports.bar)) { console.log(exports.bar.name); }