我经常阅读如何使用JavaScript中的字符串调用函数。但是如何以相同的方式获取对象的属性? This post演示了如何使用字符串来调用函数。如何使用对象属性实现相同的功能?
我试过这个: 的 Fiddle
但这一行并没有给我预期的结果。
alert( window[val] );
我做错了什么?
这是完整的代码:
f1("obj.key");
function f1(val){
var obj={
key : "Hello World"
};
alert( obj.key ); // Hello World
alert( window[val] ); // undefined
}
答案 0 :(得分:0)
首先,obj仅在函数范围内定义,如果你想让窗口知道它,你应该在全局范围内创建它(在函数范围之外)。第二,你应该调用窗口[" obj"] [" key"](将字符串与点的两侧分开)。祝你好运!
答案 1 :(得分:0)
这有两个问题。首先是因为你在obj之前声明了var,你将范围设置为函数,因此它不会被窗口访问。其次,无论你放在窗口[val]的括号中,都必须是window对象的直接属性。基本上你需要传入窗口[obj] [key]。
基本上对于你正在做的事情,你会使用这样的东西:
f1("obj.key");
function f1(val){
obj={
key : "Hello World"
};
var current = window;
var attributes = val.split( '.' );
for (var i = 0; i < attributes.length; i++) {
current = current[attributes[i]];
}
$('#2').text( obj.key ); // works fine
$('#1').text( current ); // Based on the string you pass
}`