использовать имя переменной JavaScript (буквально) - PullRequest
1 голос
/ 24 мая 2011

Как я могу сослаться на имя переменной (буквально имя переменной)?

У меня есть следующий код:

var thisVariableName = 'path/filename.js';

var script = document.createElement('script');
script.id = **I WANT THE TEXT "thisVariableName" to be added HERE**
script.type = 'text/javascript';
script.src = thisVariableName;

Чтобы при выводе script.id я получал thisVariableName как таковое, а не значение переменной

ПОСЛЕ НЕКОТОРЫХ ОТВЕТОВ:

Я хочу систематизировать добавление многих файлов сценариев. В приведенном ниже примере я добавляю четыре файла, но представьте, что мне нужно было добавить более 30 файлов (пожалуйста, оставьте себе вопрос, зачем мне нужно добавлять более 30 файлов; в конце концов, это обещание вычислений)

На данный момент единственный способ, которым я знаю, как это сделать, - создать два отдельных массива; массив 1 для строки имени файла и массив 2 для пути к файлу или АЛЬТЕРНАТИВНО, поскольку Феликс Клинг ПРЕДЛАГАЕТ создать объект для каждой переменной:

var jQueryPath = 'js/jquery-1.5.1.js';
var jQueryUICore = 'js/jquery.ui.core.js';
var jQueryUIWidget = 'js/jquery.ui.widget.js';
var jQueryUITabs = 'js/jquery.ui.tabs.js';

var fileNames = new Array ('jQueryPath','jQueryUICore','jQueryUIWidget','jQueryUITabs');

var filePaths = new Array (jQueryPath,jQueryUICore,jQueryUIWidget,jQueryUITabs);

var head = document.getElementsByTagName("head")[0]; 

for (var i=0;i<4;i++){

    var script = document.createElement('script');
    script.setAttribute('id',fileNames[i]);
    script.setAttribute('type','text/javascript');
    script.setAttribute('src', filePaths[i]);
    head.appendChild(script);

    }

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

Я надеялся, что смогу ссылаться на имена литеральных переменных массива, состоящего из переменных; то есть:

var onlyOneArray = new Array (jQueryPath,jQueryUICore,jQueryUIWidget,jQueryUITabs);

for (var i=0;i<4;i++){

        var script = document.createElement('script');
        script.setAttribute('id',**onlyOneArra[i] the NAME**);
        script.setAttribute('type','text/javascript');
        script.setAttribute('src', onlyOneArray[i]);
        head.appendChild(script);

        }

Ответы [ 4 ]

8 голосов
/ 24 мая 2011

Вы не можете получить имя переменной во время выполнения.

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

var scripts = {
    thisVariableName: 'path/filename.js'
};

for(var name in scripts) {
    if(scripts.hasOwnProperty(name)) {
        var script = document.createElement('script');
        script.id = name;
        script.type = 'text/javascript';
        script.src = scripts[name];
        //....
    }
}

Обновление: Что касается ваших изменений, то, что вы должны сделать, это:

3 голосов
/ 24 мая 2011
script.id = "thisVariableName";

? Нет способа создать такие переменные во время выполнения (и это несколько невозможно), поэтому вы уже должны знать имя переменной ... просто поместите ее в строку. Разве я совершенно не понимаю? Это в другом сценарии? Вы ссылаетесь на него с другой переменной? Вы хотите, чтобы оно было передано, а затем прочитать имя?

0 голосов
/ 24 мая 2011

Вы можете использовать строки как имена свойств объектов Object или использовать их для имен переменных (то есть свойств переменной / объекта активации) с eval.Что бы вы ни делали, вы должны в какой-то момент связать имя переменной со значением, так почему бы просто не создать объект:

var scripts = {
  jQueryPath: 'js/jquery-1.5.1.js',
  jQueryUICore: 'js/jquery.ui.core.js',
  jQueryUIWidget: 'js/jquery.ui.widget.js',
  jQueryUITabs: 'js/jquery.ui.tabs.js'
};

eval эквивалент очень похож, за исключением того, что выпредоставьте массив только имен переменных и используйте eval() для получения значений.Но это предполагает, что переменные уже были созданы и им присвоены значения с помощью какого-то механизма, который в любом случае, вероятно, будет очень похож на описанный выше.Кроме того, eval очень неэффективен и не рекомендуется, когда обычный объект будет выполнять работу намного эффективнее.

0 голосов
/ 24 мая 2011

Вы не можете получить имя переменной, afaik.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...