2012-06-26 38 views
4

我希望能夠創建使用函數變量,像:如何使用Javascript函數來命名變量?

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

所以,如果我把我結束了一個名爲prefixnamesuffix變量的函數createVar(prefix,suffix)

+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'; 

這將創建一個varaible,在一個名爲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

我知道這是重複答案的排序,但它詳細說明了窗口對象屬性的細節。 –

相關問題