2015-08-19 3 views
0

Возможно, немного тусклый вопрос, но я пытаюсь создать что-то, где я использую javascript/jquery, чтобы изменить макет сайта, и я хотел бы видеть значения как имени переменной, так и текущего значения в другом дела.Могу ли я получить имя переменной как строку после передачи ее в качестве аргумента другой функции?

Я просто делал $test.append('example string' + exampleVar), поэтому я думал, что сделаю функцию под названием test().

До сих пор у меня есть:

function test (test) { 
    $test = $('.test'); 
    $test.append(test+"<br>"); 
} 

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

+0

Глупой ошибке разметки после изменения этого после 20 раз, упс. –

+0

В этом случае вы не можете получить имя переменной – Hacketo

+0

На всех? Я думал, что это может быть правдой здесь, поэтому я, вероятно, лучше всего добавить многопараметрическую функцию со строкой вроде test ('variable', variable)? –

ответ

1

немного многословно способ сделать это, но вот пример с использованием объекта:

function tester(options) { 
    var keys = Object.keys(options); 
    console.log(keys[0] + ': ' + options[keys[0]]); // test: My value 
} 

tester({ test: 'My value' }); 

DEMO

+0

Если элемент для отладки уже является объектом (и это должно быть, вы не должны использовать global/root переменные), это очень приятно, поскольку он выгружает все свойства объекта. –

+0

Я думаю, что это прекрасно, я могу просто поставить тест ({otherVar}), и он печатает имя и значение переменной! Я не думал о вводе переменной в качестве объекта, спасибо большое! –

0

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

var test = { 
    "test" : "value" 
}; 
function test (test) { 
    var k, $test = $('.test'); 
    for(k in test){ 
     $test.append(k + "<br>"); 
    } 
} 

Кроме того, я не думаю, что есть способ получить имя переменной string. Таким образом, приведенное выше было бы способом получить имя переменной.

0

Вы можете использовать особенность JavaScript, где obj["prop"] такая же, как obj.prop

Так вместо передачи переменной в качестве переменной и в надежде получить свое название, вы используете имя в виде строки, чтобы получить значение переменной ,

Если вы не используете пространство имена/переменные и хотите глобальный переменный/корневой, передать окно, например:

function test(obj, val) { 
    console.log(val + ": " + obj[val]); 
} 

var val1 = 1; 
var val2 = 2; 

test(window, "val1"); 
test(window, "val2"); 

(очевидно вы не получите имя «OBJ» - но, возможно, это начало)

, если у вас есть только корень/глобальные переменные (как в приведенном примере в этом вопросе), то вы можете удалить OBJ:

function test(val) { 
    console.log(val + ": " + window[val]); 
} 

var val1 = 1; 
var val2 = 2; 

test("val1"); 
test("val2"); 
+0

Я раньше видел шепот окна [], но когда я попытался просмотреть их, я не думал, что мои переменные включены! На самом деле это действительно отличное решение при использовании глобальных переменных. Благодаря! –

0

кажется, что вы хотите сделать что-то вроде этого:

var argumentName = /([^\s,]+)/g; 
// fu is a function 
// fu.toString look like: function myFunction (param[, param]*) { code } 
function getParamNames(fu) { 
    var f = fu.toString(); 
    return f.slice(f.indexOf('(')+1,f.indexOf(')')).match(argumentName); 
} 

Тогда вы можете создать помощник, который будет принимать все функции:

// I choosed the console as an output, but you can set anything 
function displayParameters(fu) { 
    var _params = getParamNames(fu); 
    if(_params!==null) { 
     for(var i=0;i<_params.length; i++) { 
      console.log(_params[i]); 
     } 
    } else { console.log('no parameters'); } 
} 

И, вам нужно будет позвонить: displayParameters(test);

Смежные вопросы