今天遇到了一个比较困惑的问题,当我在写闭包的时候
var t = {test :{color : 'red'}}
function setTable(n){ //n为对象的属性
return {
color : t.n.color
}
}
var test = setTable('test');//color is not defined
写的时候发现了一个问题,函数中对象的属性并不能直接使用参数,t.n被直接视为 t 中的 value 为 'n'的 key ,如:
console.log(t.n) //undefined
s = { n : 1}
console.log(s.n)//1
后来想到了用 eval()的方法,
console.log(eval('t'))//{test{color:red}}
测试发现:eval('t') 等同于 t;
推测 eval("t."+'test')也就等同于 t.test;
那么
function setTable(n){ //n为对象的属性
var s = eval('t.'+n);
return {
color : s.color
}
}
var test= setTable('test');//{color : red}
刚刚看到 hughw 这位朋友的提醒,为了不因为我的思路而误导大家,借用他说的方法将代码整理出来:
function setTable(n){ //n为对象的属性
return {
color : t[n].color
}
}
var test= setTable('test');//{color : red}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。