Existe alguma solução para obter o nome da função de um 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) {...}
- não há informações sobre o className
ou ObjectName
. É possível obter um deles?
javascript
TJR
fonte
fonte
Respostas:
Obtenha a função construtora do seu objeto e inspecione sua propriedade name .
Retorna "minhaClasse".
fonte
Object
), você receberá o nome do primeiro link nessa cadeia, não o nome do construtor usado para criar o objeto. Veja o seguinte exemplo:function Daddy() {}; function Me() {}; Me.prototype = new Daddy; me = new Me;
.me.constructor.name
então inesperadamente retorna'Daddy'
, não'Me'
.var Foo = function() {};
.> myclass=(function(){}); new myclass
impressõesmyclass {}
Exemplo:
fonte
function Foo() { return {'foo':'bar'} }; var f = new Foo();
:(Se você usa o padrão IIFE (por exemplo, com TypeScript)
você pode anotar os protótipos antecipadamente com
e use os campos _fullname e _classname.
anotando a função aqui:
JsFiddle
fonte
Como isso já foi respondido, eu só queria apontar as diferenças nas abordagens para obter o construtor de um objeto em JavaScript. Há uma diferença entre o construtor e o nome real do objeto / classe. Se o seguinte aumenta a complexidade da sua decisão, talvez você esteja procurando
instanceof
. Ou talvez você deva se perguntar: "Por que estou fazendo isso? É isso mesmo que estou tentando resolver?"Notas:
O
obj.constructor.name
não está disponível em navegadores mais antigos. A correspondência(\w+)
deve satisfazer as classes de estilo ES6.Código:
Resultado:
Código: https://jsbin.com/wikiji/edit?js,console
fonte
Eu estava enfrentando uma dificuldade semelhante e nenhuma das soluções apresentadas aqui era ideal para o que eu estava trabalhando. O que eu tinha era uma série de funções para exibir conteúdo em um modal e estava tentando refatorá-lo sob uma única definição de objeto, tornando as funções, métodos da classe. O problema surgiu quando descobri que um dos métodos criava alguns botões de navegação dentro do modal, que usavam um onClick para uma das funções - agora um objeto da classe. Eu considerei (e ainda estou considerando) outros métodos para lidar com esses botões de navegação, mas consegui encontrar o nome da variável para a própria classe varrendo as variáveis definidas na janela pai. O que fiz foi procurar por qualquer coisa que corresponda à 'instância da' minha classe e, caso haja mais de uma,
fonte
Tente o seguinte:
fonte
Tudo que precisamos:
fonte