JavaScript 匿名函数的动态生成方法
来源:程序员人生 发布时间:2014-03-07 23:51:14 阅读次数:3016次
网(LieHuo.Net)教程 在书上看到一个例子,有点错误。修改了一下。以下是我的理解!书上是这样写的,我加了些注解:
以下为引用的内容: function User(props){ for(var prop in props){ (function(currentObj){ //这里的currentObj由this传过来的。this 为 User alert(currentObj.constructor); //可以看出来currentObj 为User //创建此属性的一个新的getter(读取器) currentObj["get"+prop] = function(){ //alert(props.name+" "+props.age+" "+prop); return props[prop]; } //创建此属性的一个新的setter(设置器) currentObj["set"+prop] = function(val){ props[prop] = val; }; })(this); //这里的this 为 User } }
var user = new User({"name":"chengkai","age":22});
//注意,name属性并不存在,因为它是属性对象(props Obj)的私有变量 alert(user.name == null); //输出 true
alert(user.getname()); //输出 22 alert(user.getage()); //输出 22 |
如上:为什么会输出都为22这样呢?哈哈。这里就是闭包问题了!!
改正:
以下为引用的内容: //****************动态生成方法********************** //props 对象,如:{"name":"chengkai","age":22} //站长网,http://www.liehuo.org/ //************************************************ function User(props){ for(var prop in props){ (function(currentObj){ //这里的currentObj由this传过来的。this 为 User //创建此属性的一个新的getter(读取器) (function(prop){ currentObj["get"+prop] = function(){ //alert(props.name+" "+props.age+" "+prop); return props[prop]; } //创建此属性的一个新的setter(设置器) currentObj["set"+prop] = function(val){ props[prop] = val; }; })(prop); })(this); //这里的this 为 User } }
var user = new User({"name":"chengkai","age":22});
//注意,name属性并不存在,因为它是属性对象(props Obj)的私有变量 alert(user.name == null); //输出 true
alert(user.getname()); //输出 chengkai
user.setage(11); user.setname("kai"); alert(user.getage()); //输出 11 alert(user.getname()); //输出 kai
|
注意前后的区别,理解了上面匿名函数的应用,应该很好看出来是么回事啦!
转自:http://www.cnblogs.com/ksyou/
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠