Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Получить имя переменной как строку


Автор: nerdy_weirdie 16.9.2010, 07:58
У меня появилась необходимость собрать большие объемы отладочных данных из javascript. Для этого удобнее всего собирать их в виде xml. Подскажите пожалуйста наиболее элегантный способ генерить этот хмl. Задача в том чтобы записывать туда некоторые наборы переменных. Например можно ли сделать функцию с переменным числом аргументов, чтобы параметрами были просто любые переменные в неопределенном количестве, и по ним автоматом генерился xml?
var myvar1="Quick";
var myvar8="brown";
var myvar5="fox";
var mwvar3="jumps";
var myvarx="over";
MyDbgLog( myvar1, myvar8, myvar5, mwvar3, myvarx);

И на выходе получалась строка "<myvar1>Quick</myvar1><myvar8>brown</myvar8><myvar5>fox</myvar5><mwvar3>jumps</mwvar3><myvarx>over</myvarx>"

как сделать такую MyDbgLog ?

Автор: CruorVult 16.9.2010, 09:44
Передавать объект:
Код

MyDbgLog( {'myvar1':'Quick', 'myvar8':'brown',...});
function MyDbgLog(obj) {
var xml = "";
for(var i in obj) {
xml+= "<"+i+">"+obj[i]+ "</"+i+">";
}
return xml;
}

Автор: nerdy_weirdie 16.9.2010, 14:40
С этими скобками, кавычками, двоеточиями, и дублированием имен переменных от функции нет никакого профита. Может есть поэлегантнее способ? Шаблоны какие или макросы?

Автор: bars80080 16.9.2010, 14:59
Цитата(nerdy_weirdie @  16.9.2010,  14:40 Найти цитируемый пост)
С этими скобками, кавычками, двоеточиями, и дублированием имен переменных от функции нет никакого профита

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

Цитата(nerdy_weirdie @  16.9.2010,  14:40 Найти цитируемый пост)
Шаблоны какие или макросы? 

вам javascript нужен или на другом языке?

Автор: nerdy_weirdie 16.9.2010, 19:48
Просто хотелось бы собирать данные просто написав переменные через запятую, это экономило бы уйму времени ибо операция будет производиться несметное количество раз. Да, JS нужен, всегда в языках есть какие-то возможности о которых не знаешь, потому такое и спрашиваю. 
Сделал пока что как массив, через запятую в кавычках, всёж лучше чем объект. Вот бы только еще от кавычек избавиться.

Автор: magelan 16.9.2010, 21:55
Так не подойдет?

Код

var s = {};

s.myvar1 = 'Quick';
s.myvar8 = 'brown';
s.myvar5 = 'fox';
s.myvar3 = 'jumps';
s.myvarx = 'over';


функцию для вывода этого CruorVult уже написал.

теоретически можно извратится, как Джон Ресиг и сказать s = window, но я бы не советовал.

Автор: skyboy 16.9.2010, 23:21
из функции выяснить, какое имя у переменной, переданной в качестве аргумента - невозможно.
по крайней мере, кроссбраузерно. а неопределенное количество аргументов можно перебрать через arguments:
Код

(function() {
  for(var i = 0; i< arguments.length; i++) {
    console.log(arguments[i]);
  }
 })
 (1, '4', [4,5], {a: 'b'});

но тогда вытянуть информацию об "имени" не получится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)