今天遇到了一個比較困惑的問題,當我在寫閉包的時候閉包
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;
那麼code
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}