function Container(properties) {
var objthis = this;
for (var i in properties) { (function() {
var t = properties[i];
objthis["get" + i] = function() {
return t;
};
objthis["set" + i] = function(val) {
t = val;
};
})();
}
}
var prop = {
Name: "Jim",
Age: 13
};
var con = new Container(prop);
console.log(con.getName());
con.setName("Lucy");
console.log(con.getName());
console.log(prop.Name);
前两个输出应该不会有什么问题。
第三个输出,在匿名函数中,properties[i]的值已经赋给了临时变量t,闭包对于外部变量的引用完全由t这个媒介来完成,所以prop传入以后并未发生任何属性的更改
遍历参数prop的属性时,针对每一个属性,用立即执行函数创建了一个闭包。
所以get/ set方法创建后,“每一对”get/ set对应一个环境,能取到隔离的变量var t,用以存放最后对象get/ set方法修改的“属性值”
以上内容来自于技术群里面的讨论,给出回答的是北川和先知,在这里做个mark以后会用到。