JavaScript 匿名函數(shù)的動(dòng)態(tài)生成方法
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-03-07 23:51:14 閱讀次數(shù):3188次
網(wǎng)(LieHuo.Net)教程 在書(shū)上看到一個(gè)例子,有點(diǎn)錯(cuò)誤。修改了一下。以下是我的理解!書(shū)上是這樣寫(xiě)的,我加了些注解:
以下為引用的內(nèi)容: function User(props){ for(var prop in props){ (function(currentObj){ //這里的currentObj由this傳過(guò)來(lái)的。this 為 User alert(currentObj.constructor); //可以看出來(lái)currentObj 為User //創(chuàng)建此屬性的一個(gè)新的getter(讀取器) currentObj["get"+prop] = function(){ //alert(props.name+" "+props.age+" "+prop); return props[prop]; } //創(chuàng)建此屬性的一個(gè)新的setter(設(shè)置器) currentObj["set"+prop] = function(val){ props[prop] = val; }; })(this); //這里的this 為 User } }
var user = new User({"name":"chengkai","age":22});
//注意,name屬性并不存在,因?yàn)樗菍傩詫?duì)象(props Obj)的私有變量 alert(user.name == null); //輸出 true
alert(user.getname()); //輸出 22 alert(user.getage()); //輸出 22 |
如上:為什么會(huì)輸出都為22這樣呢?哈哈。這里就是閉包問(wèn)題了!!
改正:
以下為引用的內(nèi)容: //****************動(dòng)態(tài)生成方法********************** //props 對(duì)象,如:{"name":"chengkai","age":22} //站長(zhǎng)網(wǎng),http://www.liehuo.org/ //************************************************ function User(props){ for(var prop in props){ (function(currentObj){ //這里的currentObj由this傳過(guò)來(lái)的。this 為 User //創(chuàng)建此屬性的一個(gè)新的getter(讀取器) (function(prop){ currentObj["get"+prop] = function(){ //alert(props.name+" "+props.age+" "+prop); return props[prop]; } //創(chuàng)建此屬性的一個(gè)新的setter(設(shè)置器) currentObj["set"+prop] = function(val){ props[prop] = val; }; })(prop); })(this); //這里的this 為 User } }
var user = new User({"name":"chengkai","age":22});
//注意,name屬性并不存在,因?yàn)樗菍傩詫?duì)象(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
|
注意前后的區(qū)別,理解了上面匿名函數(shù)的應(yīng)用,應(yīng)該很好看出來(lái)是么回事啦!
轉(zhuǎn)自:http://www.cnblogs.com/ksyou/
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)