【问题标题】:Javascript autogenerating getters for corresponding property name issueJavascript为相应的属性名称问题自动生成getter
【发布时间】:2011-09-30 13:12:41
【问题描述】:

您好,我不明白行为...

 var myObject = {};

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

我有对象“obj”,其中包含分配了对象的属性。对于每个属性,我想创建“get”+ 属性函数的名称并将其分配给“myObject”。一切都很好,除了,当我打电话时

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

我为每个“getXXX()”方法接收到相同的对象。返回的对象是在“for (prop in obj)”循环中作为最后一个迭代的对象。就像函数体中的“prop”变量“return obj[prop];”已针对每个已分配的功能进行了更改。

有人可以解释一下这种行为吗?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    在循环内定义闭包时要小心。内部闭包关闭 variable prop,not 关闭它的值。 (因此所有的道具总是相同的值,因为它们使用相同的变量。最后道具是最后一个对象)。

    有一个函数生成器函数,这样你就可以为每个方法创建一个新的自定义 prop 变量。

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

    当有人尝试在闭包中使用 for(;;) 循环中的 i 时,也经常发生此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多