Javascript 通过变量字符串定义对象

Javascript 通过变量字符串定义对象,javascript,Javascript,很难解释。。我基本上想做以下几点: var doWhat = "speak"; var speak = { hello: function() { alert: "Hello!"; } }; // Won't work doWhat.hello(); 这是一个坏例子,但你应该能够理解我的意思。 有可能吗?您可以使用eval(doWhat).hello()。这样,将对对象引用计算的内容。您可以执行以下操作 var doWhat = {}, str = "speak"; doWhat

很难解释。。我基本上想做以下几点:

var doWhat = "speak";

var speak = {
    hello: function() { alert: "Hello!"; }
};

// Won't work
doWhat.hello();
这是一个坏例子,但你应该能够理解我的意思。
有可能吗?

您可以使用
eval(doWhat).hello()。这样,将对对象引用计算
的内容。

您可以执行以下操作

var doWhat = {}, str = "speak";

doWhat[str] = {
    hello : function() {}
}; 

doWhat[str].hello();

我想这两个都不是。我认为我们想要的是,有多个具有相同“接口”的对象,并将一个对象实例化为使用该名称的任何一个对象。您试图解决的根本问题是什么?换句话说,是什么让你觉得这是一个关键的绊脚石?如果我们后退几步,可能会提出一种更为惯用的方法来做你需要做的事情。@MiladNaseri那么,为什么对这一点的任何有效答案都会与对数百万重复项中的任何一项的任何有效答案完全相同呢。您可以使用
[]
访问或
eval
。这里没什么可看的。公平的问题。我只知道这些问题并不完全相同,但如果你根据他们的答案来评估它们。。。这对我来说是太多的解释学了。你确实有一个很好的观点。是的,这是可行的,但是
eval()
通常被认为是一件非常糟糕的事情。可能还有其他更好的方法来解决潜在问题。同意,但在封闭的环境中,当您可以确保不发生篡改时,使用eval.Mh仍然是安全的,谢谢。现在,当我想用这个方法获取一个objects变量时,我该怎么做?目标评估(str)不起作用..:/不,只需执行
obj[str]
即可动态访问对象的字段。。。。或者
doWhat[someVariable].hello()。。。
jsName = 'PageIndexController';

//ST1
eval("if( typeof jsName === 'undefined')alert(111);");

//ST1
eval("if( typeof " + jsName + " === 'undefined')alert(222);");

//ST1 not work
//ST2 work and the output: 222;

//there are two different way using eval, we will get 2 different outcome.