我想使用变量的值来访问对象。
假设我有一个名为 myobject 的对象。
我想用这个名称填充一个变量并使用该变量来访问该对象。
例子:
var objname = 'myobject';
{objname}.value = 'value';
我想使用变量的值来访问对象。
假设我有一个名为 myobject 的对象。
我想用这个名称填充一个变量并使用该变量来访问该对象。
例子:
var objname = 'myobject';
{objname}.value = 'value';
全球的:
myObject = { value: 0 };
anObjectName = "myObject";
this[anObjectName].value++;
console.log(this[anObjectName]);
全球:v2
var anObjectName = "myObject";
this[anObjectName] = "myvalue"
console.log(myObject)
本地:v1
(function() {
var scope = this;
if (scope != arguments.callee) {
arguments.callee.call(arguments.callee);
return false;
}
scope.myObject = { value: 0 };
scope.anObjectName = "myObject";
scope[scope.anObjectName].value++;
console.log(scope.myObject.value);
})();
本地:v2
(function() {
var scope = this;
scope.myObject = { value: 0 };
scope.anObjectName = "myObject";
scope[scope.anObjectName].value++;
console.log(scope.myObject.value);
}).call({});
在变量名周围使用方括号。
var objname = 'myobject';
{[objname]}.value = 'value';
它是一个全局变量吗?如果是这样,这些实际上是window
对象的一部分,因此您可以执行window[objname].value
.
如果它是函数的本地函数,我认为没有什么好方法可以做你想做的事。
该对象存在于某个范围内,因此您几乎总是可以通过以下语法访问该变量:
var objname = "myobject";
containing_scope_reference[objname].some_property = 'some value';
唯一棘手的地方是当您处于封闭范围内并且想要访问顶级局部变量时。当你有这样的事情时:
(function(){
var some_variable = {value: 25};
var x = "some_variable";
console.log(this[x], window[x]); // Doesn't work
})();
您可以通过使用eval
代替访问当前作用域链来解决这个问题……但我不推荐它,除非您已经进行了大量测试并且您知道这是处理事情的最佳方式。
(function(){
var some_variable = {value: 25};
var x = "some_variable";
eval(x).value = 42;
console.log(some_variable); // Works
})();
你最好的办法是有一个始终要到待有物体(比如一个名字的引用this
在全局范围内或在局部范围内的私人顶级变量),并把一切都在那里东西。
因此:
var my_outer_variable = {};
var outer_pointer = 'my_outer_variable';
// Reach my_outer_variable with this[outer_pointer]
// or window[outer_pointer]
(function(){
var my_inner_scope = {'my_inner_variable': {} };
var inner_pointer = 'my_inner_variable';
// Reach my_inner_variable by using
// my_inner_scope[inner_pointer]
})();
你可以使用eval
:
eval(variablename + ".value = 'value'");