Javascript私有成員的實(shí)現(xiàn)方式
我之前買過(guò)一本書(shū)《Javascript高級(jí)程序設(shè)計(jì)》 Nicholas C.Zakas 著
總體來(lái)講這本書(shū)還是可以的,但看完這本書(shū)還留了幾個(gè)問(wèn)題一直困擾著我,如js中私有變量的實(shí)現(xiàn),prototype等,經(jīng)過(guò)自己一系列測(cè)試,現(xiàn)在終于弄明白了。
很多書(shū)上都是說(shuō),Javascript是不能真正實(shí)現(xiàn)Javascript私有成員的,因此在開(kāi)發(fā)的時(shí)候,統(tǒng)一約定 __ 兩個(gè)下劃線開(kāi)頭為私有變量。
后來(lái),發(fā)現(xiàn)Javascript中閉包的特性,從而徹底解決了Javascript私有成員的問(wèn)題。
- 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 根本訪問(wèn)不到,但是用對(duì)象方法能訪問(wèn)到,因?yàn)殚]包能從當(dāng)前的執(zhí)行環(huán)境中獲取信息。
接下來(lái)我們看看,共有成員是怎樣實(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
接下來(lái)在看看類靜態(tài)變量是怎樣實(shí)現(xiàn)的
- function testFn(){
- }
- testFn.Name = "KenChen";
- alert(testFn.Name);//KenChen
- testFn.Name = "CC";
- alert(testFn.Name);//CC
關(guān)于Portotype,繼承等以后的博文中敘述。
【編輯推薦】