如何让JS将字符串视为对先前定义的对象的引用?简化为:
var myObject = new MyObject();
var myString = "myObject";
var wantThisToWork = myString.myproperty;
答案 0 :(得分:29)
如果变量在全局范围内,则可以将其作为全局对象的属性
进行访问var a = "hello world";
var varName = "a";
console.log( window[varName] ); // outputs hello world
console.log( this[varName] ); // also works (this === window) in this case
但是,如果它是局部变量,唯一的方法是使用eval
(disclaimer)
function () {
var a = "hello world";
var varName = "a";
console.log( this[varName] ); // won't work
console.log( eval(varName) ); // Does work
}
除非您可以将动态变量放入对象并像属性一样访问它
function () {
var scope = {
a: "hello world";
};
var varName = "a";
console.log( scope[varName] ); // works
}
答案 1 :(得分:7)
您可以使用eval
功能。
eval(myString).myproperty
小心使用eval,如果这是用户输入的内容,它将执行任何javascript代码!
答案 2 :(得分:6)
在我看来,唯一的方法就是使用eval。但正如他们所说,eval是邪恶的 - 但不是在受控制的环境中。这是可行的方式,但我不建议使用eval,除非绝对必要。
var myObject = new MyObject();
var myString = "myObject";
var wantThisToWork = eval(myString).myproperty;
答案 3 :(得分:4)
使用 eval()
var myObject = {};
myObject.myproperty = "Hello";
var myString = "myObject";
var wantThisToWork = eval(myString).myproperty;