Javascript getVariableName - PullRequest
       43

Javascript getVariableName

2 голосов
/ 05 ноября 2010

Это мой первый пост.

Я пытаюсь выполнить базовое метапрограммирование с использованием javascript, и мне было интересно, есть ли способ получить идентификатор конкретного объекта и с этим идентификатором, получить доступ к имени переменной или просто получить имя переменной конкретного объекта.Я хочу воссоздать ситуацию, в которой вы сначала создаете каждый HTML-файл на веб-странице и добавляете к некоторым событиям тегов HTML, связанных с конкретным классом - примером класса Person-.например: Предположим, следующий код:

var someFunction = function(someText){alert(someText);}
function SomeClassFunction(){
     this.aClassFunction = someFunction;
}

var aVariableName = new SomeClassFunction();

и в коде HTML предположим, что у меня есть следующий фрагмент кода.

<html>
  <head>
    <title></title>
  </head>
  <body>
    <div onclick="aVariableName.aClassFunction('Some text to show in alert');">
    </div>
  </body>
</html>

Тогда, как вы можете заметить, событие onclick используетaVariableName, которое я создал ранее, но потому что я сначала создаю имя переменной, а затем добавляю имя в коде, потому что я знал, что aVariableName было именем этого объекта.То, что я хочу сделать или реализовать, это создать текст выше в html, не зная имя переменной конкретного объекта.Я занимался серфингом в сети, но, к сожалению, ничего не нашел об этом.

Ответы [ 3 ]

0 голосов
/ 05 ноября 2010

Я не уверен на 100%, что правильно понимаю ваш вопрос в отношении метапрограммирования, но обычно вы присоединяете обработчик событий к событию click элемента DOM, а затем можете проверить свойства этого элемента вобработчик.

В JavaScript есть несколько вещей, которые облегчают метапрограммирование: eval позволит вам интерпретировать произвольный код, чтобы вы могли построить строку кода и оценить ее.Проблемы безопасности многочисленны.Вы также можете получить доступ к свойствам объекта по индексу или по имени, например,

aVariableName.aClassFunction

- это то же самое, что

aVariableName["aClassFunction"]

Надеюсь, что это поможет.

0 голосов
/ 05 ноября 2010

Я не знаю, как получить имя переменной из самого кода, не выполняя при этом кучу разборов, что может запутаться, и я бы за это кого-нибудь застрелил.

var someValue;
var foo = function() { someValue; }
alert((foo + '')); // this is now a string, use substr to extract variable name

Вы знаете, что можете установить события, подобные этому, в javascript someElement.onclick = someFunction, поэтому вам не нужно знать имя переменной, если все, что вы делаете, это устанавливаете обработчик событий.

0 голосов
/ 05 ноября 2010

В общем, нет - вы не можете получить имя определенной переменной или ее "id".

Если вы действительно хотите, может быть возможно совершать плохие поступки с исключениями и следами стеков, чтобы получить эту информацию ... Но я не знаю, как это сделать.

Редактировать : Я предполагаю, что под «идентификатором переменной» вы подразумеваете «уникальный идентификатор объекта, на который ссылается эта переменная», как в id встроенном Python:

>>> x = {}
>>> y = z = {}
>>> (id(x), id(y), id(z))
(123, 567, 567)
...