2012-06-26 3 views
4

Я хотел бы иметь возможность создавать переменные, используя функцию, что-то вроде:Как использовать функцию Javascript для обозначения переменных?

function createVar(a,b){ 
    var [a]name[b]; 
} 

Так что, если я вызываю функцию createVar(prefix,suffix) я в конечном итоге с переменной с именем prefixnamesuffix.

+0

Вы всегда можете создать на лету переменную в JS, почему вы хотите функцию? –

+0

Зачем вам нужны переменные имена? Как правило, гораздо проще использовать доступ к хэш-стилю, который вы можете получить от голого объекта. – Gareth

+0

Не жалейте о том, чтобы задавать, по-видимому, основной вопрос. Если вы нуждаетесь в спросе, другие, скорее всего, будут заинтересованы. Это только хмурится, если вы спросите плохо, или если ваш вопрос не показывает никаких признаков усилий, чтобы объяснить это. Поэтому не делайте этого самоуничижительного танца и сразу же задавайте свой вопрос. – k0pernikus

ответ

4

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

function createVar(obj, a, b) 
{ 
    obj[a+'name'+b] = foo; 
} 
+0

избил меня за волосы. Я бы добавил, что вы также можете создавать глобальные переменные, добавляя свойства к объекту 'window':' window [a + 'name' + b] ' – jackwanders

+0

Абсолютно совершенный! Теперь мой скрипт работает. Спасибо вам обоим за вашу невероятно быструю помощь. – BiscuitBaker

+1

Если решение работает, я уверен, что Даниель был бы признателен за принятие его ответа. – jackwanders

1
function createVar(a, b, value) { 
    // declare the variable on current context(default is window), 
    // and set value, default is undefined 
    this[a + 'name' + b] = value; 
} 

использование в качестве:

createVar('a', 'b'); 
// variable anameb now is declare, but it's value is undefined 
console.log(anameb); // -> undefined 

createVar('prefix', 'suffix', 'optional'); 
// variable prefixnamesuffix now is exist in window 
console.log(prefixnamesuffix); // -> 'optional' 

или:

var obj = {}; 
createVar.call(obj, 'pre', 'suf', 'defValue'); 
// variable prenamesuf is now exist in obj, but not exist in window 
console.log(obj.prenamesuf); // -> 'defValue' 
console.log(prenamesuf); // ReferenceError: prenamesuf is not defined 
0

Это возможно - своего рода, как это немного сложнее.

Это все начинается с понимания области действия переменной. Давайте посмотрим на основной, простой пример:

var myvar = 'I see'; 

Это создает, по Название переменной базового уровня по имени myvar, что вы можете получить доступ к такой как alert(myvar);, который будет, в этом случае предупреждение «Я вижу».

Что это действительно значит, так это создать свойство на объекте окна. Таким образом, var myvar = 'I see'; совпадает с window['myvar'] = 'I see';.

Сложные объекты также могут быть созданы таким образом.

еще несколько примеров:

window['fred'] = 'howdy fred';// create fred property 
var regularfred = 'howdy fred'; // create regularfred property 
window['town'] = {}; // create town object 
window['town']['george'] = 'georgetown'; //create town.george property 
alert(fred + ":" + regularfred); // alerts "howdy fred:howdy fred" 
alert(fred == regularfred);// alerts true 
alert(this['town']['george']);// alerts "georgetown" 

function createvar(a, b) { 
    this[a + 'name' + b] = "fredling"; 
    alert(this[a + 'name' + b]);// alerts "fredling" 
    alert(window[a + 'name' + b]);// alerts "fredling" 
} 
var hi = 'hi'; 
var lo = 'loook'; 
createvar(hi, lo); 
alert(this[hi + 'name' + lo]);// alerts "fredling" 

Requisit рабочий пример на это: http://jsfiddle.net/pGWZN/

+0

Я знаю, что это SORT дублированного ответа, но он детализирует особенности свойств объекта окна. –

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