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)