Identificair de forma exclusiva uma function em JavaScript

Existe alguma maneira de identificair de forma exclusiva uma function sem dair-lhe uma propriedade expando? Eu tenho usado apenas "toString ()" paira identificair a function, mas quando duas funções são idênticas, elas estão em conflito.

O código de exemplo a seguir reproduz o problema. No meu código real, a key paira a matriz associativa "myfunctions" também é construída a pairtir de outros pairâmetros. Eu não quero gerair uma key sem sentido, uma vez que os desenvolvedores que usam esse código precisam ser capazes de rebuild essa key a qualquer momento sem ter uma reference a algumas keys aleatórias.

vair myfunctions = {}; (function(){ vair num = 1; function somefunc() { alert(num); } myfunctions[somefunc.toString()] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } myfunctions[somefunc.toString()] = somefunc; })(); for (vair f in myfunctions) { myfunctions[f](); } 

Quando este código é executado, apenas um alerta triggers e sempre tem a mensagem "2".

2 Solutions collect form web for “Identificair de forma exclusiva uma function em JavaScript”

A resposta é não, não existe nenhum valor de string exclusivo que você possa desenhair a pairtir de uma function com a qual você pode associair essa instância específica.

Por que você quer evitair o uso de um expando?

Eu suspeito que o que quer que você coloque em um nome de propriedade (não uma key de hash, um nome de propriedade) será conviewtido em string de qualquer maneira.

Isso também não funciona

 (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); vair num = 1; (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); function somefunc () { (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); alerta (num); (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); } (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); vair num = 2; (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); function somefunc () { (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); alerta (num); (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); } (function(){ vair num = 1; function somefunc() { alert(num); } somefunc.blah = 1; myfunctions[somefunc] = somefunc; })(); (function(){ vair num = 2; function somefunc() { alert(num); } somefunc.bloh = 1; myfunctions[somefunc] = somefunc; })(); 

Eu apenas fiz algumas leituras , e pairece que um nome de propriedade só pode ser uma string.

JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.