Como obter o nome do object de class como uma string em JavaScript? DoCow
SimpleDateFormat ignorando o mês ao analisar Como distinguir entre o clique esquerdo e direito do mouse com jQuery Aceitar o certificado ssl autoassinado do servidor no cliente Java Dividir TSQL por zero encontrado apesar de não haver colunas contendo 0 Quais são as formas de editar uma function em R? Como ler dados do arquivo * .CSV usando javascript? Como posso criar instâncias de subclasss de objects gerenciados em uma extensão Swift NSManagedObject? Data / hora de conversão para determinado fuso horário – java converter base64 para imagem em javascript / jquery mysql – fazendo um mecanismo semelhante ao seqences da Oracle Qual é o objective das margens de recolhimento de CSS? Como selecionar linhas entre dois padrões de marcadores que podem ocorrer várias vezes com o awk / sed A maneira mais eficiente de encontrar as palavras mais comuns em uma grande seqüência de palavras '\ r': comando não encontrado – .bashrc / .bash_profile Passar um argumento extra para uma function de retorno de chamada
Digamos que eu instancie um object em Javascript assim:
Agora, é possível obter o nome do object var como string 'myObj' dentro de um dos methods de class?
Detalhes adicionais (editados):
A razão pela qual eu gostaria de obter o nome da variável que contém referência ao object é que meu novo myObj criaria um novo DIV clicável na página que precisaria chamar uma function myObj.someFunction() . Ao inserir o novo DIV , preciso saber o nome da variável que contém referência ao object. Existe talvez uma maneira melhor de fazer isso?
Você está certo, desculpe pela confusão na terminologia.
A razão pela qual eu gostaria de obter o nome da variável que contém referência ao object é que meu novo myObj criaria um novo DIV clicável na página que precisaria chamar uma function myObj.someFunction (). Ao inserir o novo DIV, preciso saber o nome da variável que contém referência ao object. Existe talvez uma maneira melhor de fazer isso?
Shog9 está certo de que isso não faz muito sentido perguntar, já que um object poderia ser referido por múltiplas variables. Se você realmente não se importa com isso, e tudo que você quer é encontrar o nome de uma das variables ​​globais que se referem àquele object, você pode fazer o seguinte hack:
Observe que esse é um hack feio e não deve ser usado no código de produção. Se houver mais de uma variável referindo-se a um object, você não poderá dizer qual delas obterá. Ele só pesquisará as variables ​​globais, portanto não funcionará se uma variável for local para uma function. Em geral, se você precisar nomear algo, você deve passar o nome para o construtor ao criá-lo.
edit : Para responder ao seu esclarecimento, se você precisar se referir a algo de um manipulador de events, você não deve estar se referindo a ele pelo nome, mas sim adicionar uma function que se refere diretamente ao object. Aqui está um exemplo rápido que eu mostrei algo semelhante, eu acho, ao que você está tentando fazer:
Resposta curta: Não. MyObj não é o nome do object, é o nome de uma variável que contém uma referência ao object – você pode ter qualquer número de outras variables ​​contendo uma referência ao mesmo object.
Agora, se é o seu programa, então você faz as regras: se você quer dizer que qualquer object será referenciado apenas por uma variável, sempre, e diligentemente reforce isso em seu código, então apenas defina uma propriedade no object com o código. nome da variável.
Dito isto, duvido que o que você está pedindo é realmente o que você realmente quer. Talvez descreva seu problema um pouco mais detalhadamente …?
Pedantry: JavaScript não tem classs. someObject é uma function construtora. Dada uma referência a um object, você pode obter uma referência à function que a criou usando a propriedade constructor .
Em resposta aos detalhes adicionais que você forneceu:
A resposta que você está procurando pode ser encontrada aqui: Escopo de Retorno de Chamadas em JavaScript (e em resposta a inúmeras outras perguntas sobre SO – é um ponto comum de confusão para aqueles que são novos em JS). Você só precisa envolver a chamada no membro do object em um fechamento que preserva o access ao object de contexto.
Você pode fazer isso convertendo pelo construtor para uma string usando .toString () :
Você pode conseguir seu objective usando-o em uma function e examinando a origem da function com toString() :
Se você não quiser usar um construtor de function como na resposta de Brian, você pode usar Object.create (): –
Estranhamente, eu não consegui fazer o acima funcionar usando newDiv.onClick, mas funciona com newDiv.addEventListener / newDiv.attachEvent.
Como o Object.create é novo, inclua o seguinte código do Douglas Crockford para navegadores mais antigos, incluindo o IE8.
Como uma situação mais elementar, seria legal se this tivesse uma propriedade que pudesse referenciar sua variável de referência ( heads ou tails ), mas infelizmente ela apenas referencia a instanciação do novo object coinSide .
que sempre exibe
e o motor Gecko do Firefox mostra:
Obviamente, neste exemplo, para resolver #1 e, portanto, toss , é simples o suficiente para testar toss==heads and toss==tails . Esta questão, que é realmente perguntando se o javascript tem um mecanismo call-by-name , motiva a consideração da contraparte, existe um mecanismo de call-by-value para determinar o valor ACTUAL de uma variável? O exemplo demonstra que os "valores" de ambas as heads e tails são idênticos, mas o alert(heads==tails) é false .
A auto-referência pode ser coagida da seguinte forma:
(evitando a caça ao espaço de objects e possíveis ambigüidades, conforme observado no nome do object da class How to get class as a string in Javascript? )
para exibir heads ou tails .
Talvez seja um anátema para a essência do design de linguagem do Javascript, como uma linguagem funcional de prototipagem interpretada, ter resources como primitivos.
então, como estipulado ...
Existe uma maneira melhor ... ?
"melhor" como mais fácil? Mais fácil de programar? Mais fácil de entender? Mais fácil como na execução mais rápida? Ou é como em " ... e agora para algo completamente diferente "?
Imediatamente após o object ser instantâneo, você pode append uma propriedade, diga o name , ao object e atribuir o valor da string que você espera a ele:
Alternativamente, a atribuição pode ser feita dentro dos códigos da class, ou seja,
Algum tempo atrás, eu usei isso.
Pop um Alerta : "I get_this_name" .
Isso é muito antigo, mas eu encontrei essa pergunta pelo Google, então talvez essa solução possa ser útil para outras pessoas.