4

次のような関数を使用して変数を作成できるようにしたいと思います。

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

したがって、関数を呼び出すと、createVar(prefix,suffix)という名前の変数になりますprefixnamesuffix

4

3 に答える 3

4

その方法でローカル変数を作成することはできませんが、文字列を使用してプロパティを作成できます。

function createVar(obj, a, b)
{
   obj[a+'name'+b] = foo;
}
于 2012-06-26T12:51:17.323 に答える
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
于 2012-06-26T14:14:41.970 に答える
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/

于 2013-07-25T13:46:12.603 に答える