如何在javascript中调用动态命名的对象及其方法?

如何在javascript中调用动态命名的对象及其方法?,javascript,jquery,Javascript,Jquery,我的对象的名称将是动态的 i、 e 我想知道如何动态地调用它 e、 g 请注意,txtGrantAccess_5已经存在,请您在回答中避免使用eval?我试着理解其他与此类似的问题,但它们不是一回事 那么: var container = {}; var name = 'dynamicName'; container[name] = new MyObject(); container[name].getValue() 试试这个片段 var abcd = 'txtGrantAccess_5';

我的对象的名称将是动态的

i、 e

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

e、 g

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

那么:

var container = {};
var name = 'dynamicName';
container[name] = new MyObject();
container[name].getValue()
试试这个片段

var abcd = 'txtGrantAccess_5';
this[abcd].GetValue();
但要注意“这个”的价值。如果它在浏览器中,也许这会有所帮助

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

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

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

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

你的意思是你会有一些全局变量的名称你还不知道吗?如果你不知道函数存储在哪里,
eval
是唯一的选项。你怎么知道这个动态命名变量的名称呢?@promanski我有一个键值,这样我就可以确定名称的开头“txtGrantAccess_u2;”+keyValue将为我提供服务器端编程已创建的实际对象名,以便我在客户端进行访问side@Musa阅读我上面的评论问题是它不是一个新的对象。。它是一个现有的对象txtGrantAccess_5已经存在,由服务器端编程动态创建。工作起来很有魅力,谢谢!这是否与所有浏览器兼容?我说的是“this”@innocent的解决方案JavaScript中“this”的问题是它不同于大多数其他语言中已知的“this”关键字。请用谷歌搜索:)-1,你可以动态获取局部变量,仅仅因为人们不喜欢eval并不意味着你不能使用它。@Connor OP实际上说了
避免在post@Musa我知道,这个问题没有说明eval,但是说不可能动态获取局部变量。基本上,我想说的是“你不能动态地获取局部变量。”是false,“没有办法动态地获取foo。”是false@Conor我倾向于不去想
eval
,因为我已经被它烧死了太多次:)所以是的,用
eval
是可能的,但肯定是不可取的。
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