Подтвердить что ты не робот

Определить исходное имя переменной после ее передачи функции

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

function getVariableName(unknownVariable){
  return unknownVariable.originalName;
}

getVariableName(foo); //returns string "foo";
getVariableName(bar); //returns string "bar";

Это для плагина jquery, над которым я работаю, и я хотел бы иметь возможность отображать имя переменной, которая передается функции "debug".

4b9b3361

Ответ 1

Вы правы, это очень невозможно в здравом смысле, поскольку только значение передается в функцию.

Ответ 2

Глобальный метод w/string

Вот техника, которую вы можете использовать, чтобы сохранить имя и значение переменной.

// Set up a global variable called g
var g = {};
// All other variables should be defined as properties of this global object
g.foo = 'hello';
g.bar = 'world';

// Setup function
function doStuff(str) {
  if (str in g) {
    var name = str;
    var value = g[str];
    // Do stuff with the variable name and the variable value here
    // For this example, simply print to console
    console.log(name, value);
  } else {
    console.error('Oh snap! That variable does not exist!');
  }
}

// Call the function
doStuff('foo'); // log: foo hello
doStuff('bar'); // log: bar world
doStuff('fakeVariable'); // error: Oh snap! That variable does not exist!

Ответ 3

Ну, все глобальные переменные являются свойствами глобального объекта (этого или окна), не так ли? Поэтому, когда я хотел узнать имя моих переменных, я сделал следующую функцию:

var getName = function(variable) {
  for (var prop in window) {
    if (variable === window[prop]) {
      return prop;
    }
  }
}
var helloWorld = "Hello World!";
console.log(getName(helloWorld)); // "helloWorld"

Иногда не работает, например, если 2 строки создаются без нового оператора и имеют одинаковое значение.

Ответ 4

Теперь это возможно благодаря ES6:

function getVariableName(unknownVariableInAHash){
  return Object.keys(unknownVariableInAHash)[0]
}

const foo = 42
const bar = 'baz'
console.log(getVariableName({foo})) //returns string "foo"
console.log(getVariableName({bar})) //returns string "bar"

Ответ 5

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

function makeJSON(){ //Pass the variable names as string parameters [not by reference]
ret={};
for(i=0; i<arguments.length; i++){
    eval("ret."+arguments[i]+"="+arguments[i]);
}
return ret;
}

Пример:

a=b=c=3;
console.log(makeJSON('a','b','c'));

Возможно, это причина этого запроса