¿Hay alguna solución para obtener el nombre de la función de un objeto?
function alertClassOrObject (o) {
window.alert(o.objectName); //"myObj" OR "myClass" as a String
}
function myClass () {
this.foo = function () {
alertClassOrObject(this);
}
}
var myObj = new myClass();
myObj.foo();
for (var k in this) {...}
- no hay información sobre el className
o ObjectName
. ¿Es posible obtener uno de ellos?
javascript
TJR
fuente
fuente
Respuestas:
Obtenga la función constructora de su objeto y luego inspeccione su propiedad de nombre .
Devuelve "myClass".
fuente
Object
), obtendrá el nombre del primer enlace en esa cadena, no el nombre del constructor utilizado para crear el objeto. Tomemos el siguiente ejemplo:function Daddy() {}; function Me() {}; Me.prototype = new Daddy; me = new Me;
.me.constructor.name
entonces inesperadamente regresa'Daddy'
, no'Me'
.var Foo = function() {};
.> myclass=(function(){}); new myclass
impresionesmyclass {}
Ejemplo:
fuente
function Foo() { return {'foo':'bar'} }; var f = new Foo();
:(Si usa el estándar IIFE (por ejemplo, con TypeScript)
podrías anotar los prototipos por adelantado con
y luego use los campos _fullname y _classname.
función de anotación aquí:
JsFiddle
fuente
Como esto ya fue respondido, solo quería señalar las diferencias en los enfoques para obtener el constructor de un objeto en JavaScript. Hay una diferencia entre el constructor y el nombre real del objeto / clase. Si lo siguiente se suma a la complejidad de su decisión, entonces tal vez esté buscando
instanceof
. O tal vez deberías preguntarte "¿Por qué estoy haciendo esto? ¿Es esto realmente lo que estoy tratando de resolver?"Notas:
El
obj.constructor.name
no está disponible en navegadores antiguos. La coincidencia(\w+)
debe satisfacer las clases de estilo ES6.Código:
Resultado:
Código: https://jsbin.com/wikiji/edit?js,console
fuente
Me enfrentaba a una dificultad similar y ninguna de las soluciones presentadas aquí era óptima para lo que estaba trabajando. Lo que tenía era una serie de funciones para mostrar contenido en un modo y estaba tratando de refactorizarlo bajo una única definición de objeto haciendo las funciones, métodos de la clase. El problema surgió cuando descubrí que uno de los métodos creaba algunos botones de navegación dentro del modal que usaban un onClick para una de las funciones, ahora un objeto de la clase. He considerado (y sigo considerando) otros métodos para manejar estos botones de navegación, pero pude encontrar el nombre de la variable para la clase barriendo las variables definidas en la ventana principal. Lo que hice fue buscar cualquier cosa que coincida con la 'instancia de' mi clase, y en caso de que haya más de una,
fuente
Prueba esto:
fuente
Todo lo que necesitamos:
fuente