Динамические имена переменных в javascript
У меня есть переменная:
var variableDynamic = 1;
// or
var variableDynamic = 1 + i++;
Можно ли использовать это для создания имен динамических переменных, например, примерно так:
var variableName + variableDynamic = {};
// or
var (variableName + variableDynamic) = {};
Я знаю, что я написал выше, абсурдно, но это объясняет идею. Возможно ли это?
Хорошо, что я хочу сделать, чтобы создать элемент (загрузить форму) каждый раз, когда пользователь нажимает на добавление новой группы файлов, все работает отлично, за исключением того, что для плагина, который я использую для него, нужна специальная переменная для каждой формы загрузки, чтобы вызвать кнопку загрузки (.uploadStoredFiles();).
Это грубый код, который я сделал:
$('#addOneMoreFileOrGroup').on('click', function(){
var latestFileUploaderId = parseInt($('.well-large .file-uploader').last().attr('id').split('-')[2]) + 1;
$('.well-large .control-group:last').after('<div class="control-group deal-type-online"> \
<label class="control-label">File / File Group Title:</label> \
<div class="controls"> \
<input class="span4 file-title" type="text"> \
<span class="question label label-warning" data-title="File / Group Name:" data-content="Name for your file or group of related files (for example your brand logotype in different file formats)." data-original-title="">?</span> \
<div id="file-uploader-' + latestFileUploaderId + '" class="file-uploader"></div> \
</div> \
</div>');
var HERE_I_NEED_DYNAMIC_VAR = new qq.FileUploader({
element: document.getElementById('file-uploader-' + latestFileUploaderId + ''),
action: 'do-nothing.htm',
autoUpload: false,
debug: true,
uploadButtonText: '<i class="icon icon-plus"></i> Select Files...',
onSubmit: function() {
$('#file-uploader-' + latestFileUploaderId + ' .qq-uploader').after('<button id="file-uploader-trigger-' + latestFileUploaderId + '" class="btn btn-primary"><i class="icon-upload icon-white"></i> Upload now</button>');
$('#file-uploader-trigger-' + latestFileUploaderId + '').on('click', function() {
if($(this).parent().parent().parent().parent().find('.file-title').val() !== '') {
HERE_I_NEED_DYNAMIC_VAR.uploadStoredFiles();
} else {
$(this).parent().parent().parent().addClass('error');
}
});
}
});
});
}
Ответы
Ответ 1
В JavaScript свойства объекта могут быть доступны либо через obj.prop
, либо obj['prop']
.
В глобальном масштабе все переменные являются дочерними элементами свойства window
. Таким образом, вы сможете:
var variableDynamic = 'Test';
window['variableName' + variableDynamic] = 'your value';
Отметьте эту скрипту.
Однако, если вы хотите ограничить область действия этой переменной функцией, вам нужно будет определить родительский объект и использовать это вместо window
.
Ответ 2
Вы можете создавать динамические переменные с eval
.
eval("dynamic" + i + " = val[i]");
Также посмотрите на это: Используйте имена динамических переменных в JavaScript
Ответ 3
Для этого вы можете использовать eval()
. Но eval()
- зло. Вы должны использовать массив для таких вещей.
Пример:
var i = 1337;
eval('var myvar' + i + ' = \'value\';');
alert(myvar1337);
Ответ 4
Чтобы добавить к ответу FAngels, вы можете использовать нотацию в любом месте. Это означает, что в дополнение к использованию window['var']
вы можете использовать this['var']
.
Ответ 5
Я не думаю, что eval()
является злом обязательно - иногда это иногда злоупотребляет. Задача состоит в том, чтобы взять строку и eval uate "в код JavaScript ( MDN), поэтому iff вам нужно динамически устанавливать переменные eval()
- это один из способов:
var t = 't';
var four = '4';
eval('var ' + (t + four) + ' = "some value";');
console.log(t4);
// returns "some value" to the console
Вероятно, существуют более эффективные методы для создания пар динамических переменных + значений, не в последнюю очередь потому, что eval uated code-strings реализованы на глобальном уровне, но вышеописанное работает. Вопрос в том, лучший ли он для того, чего вы хотите достичь (?). См. в этом блоге в 2013 году из NCZOnline для обсуждения` eval() '.
Ответ 6
Не уверен, что это можно сделать в области функций, но глобальная переменная может быть создана следующим образом:
window[variableName + variableDynamic] = {}
Ответ 7
Я не думаю, что вы можете создавать имена динамических переменных в javascript, но вы можете установить атрибуты объектов по строкам. Поэтому, если вы создаете свои динамические переменные в качестве атрибутов объекта, вы можете достичь своей цели.