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以后会用到。