0
window[objref]
不起作用
self[objref]
无法正常工作或如何从字符串的名称中创建对象的引用?
这里是jsfiddle。
下面是代码:
var bob = {
n: {},
y: {
somekey: 12,
oo: 'yah',
pop: {
t: 36
}
},
m: function() {},
l: 'hi'
};
function membersOf(s) {
//var o = window[s]; // returns false false
// var o = self[s]; // returns false false
var o = s; // returns ["0", "1", "2", "3", "4"] ["somekey", "oo", "pop"]
var ret_array = [];
for (var p in o) {
if (o[p] != o.constructor.prototype[p]) {
ret_array.push(p);
}
}
if (ret_array.length === 0) {
return false;
} else {
return ret_array;
}
}
var ref = 'bob.y';
var byname = membersOf(ref);
var byval = membersOf(bob.y);
console.log(byname, byval);
'byval'构成没有问题,因为如果'var o = s;'被取消注释,它会返回正确的结果;它是'byref'我试图得到。 – 2011-06-10 10:21:35
我绊倒了我愚蠢的命名方案,并没有得到您的建议的第一点 - 抱歉;)但它的作品,如果ref是'评估'。我不明白为什么。 – 2011-06-10 10:31:01
它工作的原因是没有使用eval你正在查看一个字符串(无论它是一个字符串常量,如'bob.y',或者它是一个已分配的字符串变量,它仍然是一个字符串)。 eval()函数评估一个字符串,就好像它是javascript一样 - 它专门用于处理它的事情。 – mah 2011-06-10 11:08:33