如何使用JavaScript函数来命名变量?

4

我希望能够使用函数创建变量,类似于:

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

如果我调用函数createVar(prefix,suffix),我将得到一个名为prefixnamesuffix的变量。


你可以在JS中随时创建即时变量,为什么需要函数? - Furqan Hameedi
为什么需要使用变量名可变的变量?通常来说,从裸对象中获取哈希样式访问要容易得多。 - Gareth
不要因为问一个看似基础的问题而感到抱歉。如果你需要问,很可能其他人也会感兴趣。只有当你提出问题的方式很差或者你的问题没有任何努力去解释这个问题时,才会被人所不齿。所以不要自我贬低,立即提出你的问题吧。 - k0pernikus
3个回答

4
你不能用那种方式创建局部变量,但你可以使用字符串来创建属性。
function createVar(obj, a, b)
{
   obj[a+'name'+b] = foo;
}

以微弱之差胜出。我只想补充一点,您还可以通过将属性附加到“window”对象来创建全局变量:window[a+'name'+b] - jackwanders
非常完美!我的脚本现在可以工作了。感谢你们两个提供如此快速的帮助。 - BiscuitBaker
1
如果这个解决方案有效,我相信丹尼尔会感激您接受他的答案。 - jackwanders
谢谢你提醒,可能很明显,但这是我在这里的第一篇帖子。再次感谢你的帮助。 - BiscuitBaker

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);,在这种情况下会警报"I see"。

实际上,这将在window对象上创建一个属性。因此,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"

关于此的工作示例要求:http://jsfiddle.net/pGWZN/


我知道这有点重复,但它详细说明了窗口对象属性的具体信息。 - Mark Schultheiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接