Javascript私有成員的實(shí)現(xiàn)方式
作者:陳鶴偉 
  在OO泛濫的年代,來看看Javascript私有成員是怎么實(shí)現(xiàn)的,以及各種類成員的實(shí)現(xiàn)方式。希望本文能給大家?guī)韼椭?/div>  
 
                         
  我之前買過一本書《Javascript高級程序設(shè)計(jì)》 Nicholas C.Zakas 著
總體來講這本書還是可以的,但看完這本書還留了幾個問題一直困擾著我,如js中私有變量的實(shí)現(xiàn),prototype等,經(jīng)過自己一系列測試,現(xiàn)在終于弄明白了。
很多書上都是說,Javascript是不能真正實(shí)現(xiàn)Javascript私有成員的,因此在開發(fā)的時(shí)候,統(tǒng)一約定 __ 兩個下劃線開頭為私有變量。
后來,發(fā)現(xiàn)Javascript中閉包的特性,從而徹底解決了Javascript私有成員的問題。
- function testFn(){
 - var _Name;//定義Javascript私有成員
 - this.setName = function(name){
 - _Name = name; //從當(dāng)前執(zhí)行環(huán)境中獲取_Name
 - }
 - this.getName = function(){
 - return _Name;
 - }
 - }// End testFn
 - var test = testFn();
 - alert(typeof test._Name === "undefined")//true
 - test.setName("KenChen");
 
test._Name 根本訪問不到,但是用對象方法能訪問到,因?yàn)殚]包能從當(dāng)前的執(zhí)行環(huán)境中獲取信息。
接下來我們看看,共有成員是怎樣實(shí)現(xiàn)的
- function testFn(name){
 - this.Name = name;
 - this.getName = function(){
 - return this.Name;
 - }
 - }
 - var test = new testFn("KenChen");
 - test.getName(); //KenChen
 - test.Name = "CC";
 - est.getName();//CC
 
接下來在看看類靜態(tài)變量是怎樣實(shí)現(xiàn)的
- function testFn(){
 - }
 - testFn.Name = "KenChen";
 - alert(testFn.Name);//KenChen
 - testFn.Name = "CC";
 - alert(testFn.Name);//CC
 
關(guān)于Portotype,繼承等以后的博文中敘述。
【編輯推薦】
責(zé)任編輯:彭凡 
                    來源:
                    cnblogs
  
 
相關(guān)推薦
 2010-07-26 09:20:48
 
 
 














 
 





 