2011-09-30 24 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在一个封闭也经常发生。

相关问题