关于闭包的一些小东西

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

posted @ 2013-12-06 18:08  Nunn  阅读(213)  评论(0编辑  收藏  举报