2011-06-10 34 views
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); 

回答

1

你試過var byval = membersOf(eval(ref));

+0

'byval'構成沒有問題,因爲如果'var o = s;'被取消註釋,它會返回正確的結果;它是'byref'我試圖得到。 – 2011-06-10 10:21:35

+0

我絆倒了我愚蠢的命名方案,並沒有得到您的建議的第一點 - 抱歉;)但它的作品,如果ref是'評估'。我不明白爲什麼。 – 2011-06-10 10:31:01

+0

它工作的原因是沒有使用eval你正在查看一個字符串(無論它是一個字符串常量,如'bob.y',或者它是一個已分配的字符串變量,它仍然是一個字符串)。 eval()函數評估一個字符串,就好像它是javascript一樣 - 它專門用於處理它的事情。 – mah 2011-06-10 11:08:33

相關問題