0

我有一种情况,我的对象的名称是动态的..

IE

txtGrantAccess_5.GetValue();

我想知道如何动态调用它?

例如

var abcd = 'txtGrantAccess_5';
abcd.GetValue();

请注意 txtGrantAccess_5 已经存在,请您也避免在答案中使用 eval 吗?我尝试理解其他几乎与此类似的问题,但它们不是一回事......

4

3 回答 3

2

您无法动态获取局部变量。但是,如果它是对象的属性,您可以使用[]语法获取它。

var obj = {};
obj.foo = function() {};
obj.foo();
obj['foo'](); // same as above.

但在这种情况下,根本无法动态获取局部变量。

var fn = function() {
  var foo = '123';
  // no way to get foo dynamically.
}

一个例外是全局变量。在全局范围内,局部变量被创建为窗口对象的属性:

// global scope, outside of any function.
var foo = function() {};
window.foo();
window['foo'](); // same as above

请记住,许多全局变量通常不受欢迎,尤其是如果有足够的变量需要像这样动态地查找。您可能只需要一个容器对象来保存这些值,就像我发布的第一个示例一样。

于 2013-10-15T23:45:12.810 回答
0

怎么样:

var container = {};
var name = 'dynamicName';
container[name] = new MyObject();
container[name].getValue()
于 2013-10-15T23:39:58.107 回答
0

试试这个片段

var abcd = 'txtGrantAccess_5';
this[abcd].GetValue();

但要小心“this”的值。如果它在浏览器中,也许这会有所帮助

var abcd = 'txtGrantAccess_5';
window[abcd].GetValue();
于 2013-10-15T23:42:13.053 回答