匿名函数引用外部变量是引用类型的问题
发布于 11 年前 作者 ty-bt 4242 次浏览 最后一次编辑是 8 年前
var obj = {};
var funNames = ['get', 'set'];
for(var item in funNames){
	var funName = funNames[item];
	obj[funName] = function(){
		console.log(funName);
	}
}
obj.get();
obj.set();

最后两个都输出 set, 我想实现的是一个输出 get, 一个输出set

6 回复

用闭包可以实现

var obj = {};
var funNames = ['get', 'set'];
for(var item in funNames){
  var funName = funNames[item];
  function some(funName){
    return function() {
      console.log(funName);
    }
  }
  obj[funName] = some(funName);
}
obj.get();
obj.set();
var obj = {};
var funNames = ['get', 'set'];
for(var item in funNames){
    var funName = funNames[item];
    //动态生成function
    obj[funName] = new Function("console.log('" + funName + "');");
}
obj.get();
obj.set();

可以实现我的功能 非常感谢.

这种方式也可以解决我的问题, 谢谢
不过有一点点不易于扩展…

var obj = {};
var funNames = ['get', 'set'];
funNames.forEach(function(funName) {
    obj[funName] = function(){
        console.log(funName);
    }
});
obj.get();
obj.set();

这个最简洁最有效

回到顶部