CNode

匿名函数引用外部变量是引用类型的问题

Tty-bt发布于12 年前最后回复12 年前6 回复4749 浏览0 收藏
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)

L
luoyetx#1·12 年前

用闭包可以实现

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();
J
j4cnodejs#2·12 年前
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();
T
ty-bt#3·12 年前
引用 luoyetx用闭包可以实现

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

T
ty-bt#4·12 年前
引用 j4cnodejs

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

P
peiweippww#5·12 年前
var obj = {};
var funNames = ['get', 'set'];
funNames.forEach(function(funName) {
    obj[funName] = function(){
        console.log(funName);
    }
});
obj.get();
obj.set();
J
j4cnodejs#6·12 年前
引用 peiweippww

这个最简洁最有效

参与回复
登录后即可参与回复。登录