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