Javascript getVariableName

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

Я пытаюсь выполнить базовое метапрограммирование с помощью 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 ответа

Решение

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

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

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

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

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

aVariableName.aClassFunction

такой же как

aVariableName["aClassFunction"]

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

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

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

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

>>> x = {}
>>> y = z = {}
>>> (id (x), id (y), id (z))
(123, 567, 567)
Другие вопросы по тегам