2011-09-30 20 views
1

您好我不理解的行爲......的Javascript autogenerating干將相應屬性的名稱問題

var myObject = {}; 

for (prop in obj){ 
    var fnName = "get" + prop; 
    myObject[fnName] = function(){ 
     return obj[prop]; 
    }; 
} 

我有對象「目標文件」含有具有分配對象的屬性。對於每個屬性,我想創建「get」+屬性函數的名稱並將其分配給「myObject」。一切都很好,除了當我打電話

myObject.getXXXA(); 
myObject.getXXXB(); 
myObject.getXXXC(); 

我收到每個「getXXX()」方法相同的對象。返回的對象是作爲「for(prop in obj)」循環中最後一個被迭代的對象。它就像函數體中的「prop」變量「return obj [prop];」對每個已分配的功能都進行了更改。

有人可以解釋我的行爲嗎?

回答

1

小心定義環內的閉合。內部閉合關閉了變量 prop,而不是超過其值。 (因此所有道具都是相同的值,因爲它們使用相同的變量。最後的道具是最後一個物體)。

有一個函數製造函數,因此您可以爲每個方法創建一個新的自定義prop變量。

function make_getter(p){ 
    return function(){ 
     return obj[p]; 
    }; 
} 

for(prop in obj){ 
    myObjec['get' + prop] = make_getter(prop); 
} 

這個問題,當有人試圖使用從爲(;;)循環的i在一個封閉也經常發生。

相關問題