日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4)公有成员\私有成员和静态成员

發(fā)布時(shí)間:2025/4/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4)公有成员\私有成员和静态成员 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1)實(shí)現(xiàn)類的公有成員.
??? 前面定義的任何類成員都屬于公有成員的范疇,該類的任何實(shí)例都對外公開這些屬性和方法.
???
??? 2)實(shí)現(xiàn)類的私有成員.
??? 私有成員,即只在類的內(nèi)部實(shí)現(xiàn)中可以共享訪問的成員,不對外公開.
??? JavaScript并沒有提供特殊的機(jī)制來定義私有成員,但可以用一些技巧來實(shí)現(xiàn)這個(gè)功能.
??? 這個(gè)技巧主要是通過變量的作用域來實(shí)現(xiàn)的.在JavaScript中,一個(gè)函數(shù)內(nèi)部定義的變量稱為局部變量,該變量不能被函數(shù)外的程序所訪問,卻可以被函數(shù)內(nèi)部定義的嵌套函數(shù)所訪問.在實(shí)現(xiàn)私有成員的過程中,正利用了這一性質(zhì).
??? 在類的構(gòu)造函數(shù)中可以為類添加成員,通過這種方式定義的類成員,實(shí)際上共享了在構(gòu)造函數(shù)內(nèi)部定義的局部變量,這些變量就可以看作類的私有成員,因?yàn)樗狭怂接谐蓡T的定義(內(nèi)部可訪問,外部不可訪問.)
??? 如下:
function?class1(){
????
var?pp?=?"this?is?a?private?property.";?//私有屬性成員pp
????function?pm(){??????//私有方法
????????alert(pp);
????}
????
this.method1?=?function(){
????????
//在公有成員方法中改變私有屬性的值.
????????pp="pp?has?been?changed";
????}
????
this.method2?=?function(){
????????
//在公有成員方法中調(diào)用私有方法
????????pm();
????}
}
var?obj1?=?new?class1();
obj1.method2();?

obj1.method1();?
obj1.method2();?
這里,就實(shí)現(xiàn)了私有屬性pp和私有方法pm.
??? 實(shí)現(xiàn)原理:運(yùn)行完class1之后,盡管看上去pp和pm這些局部變量應(yīng)該隨即消失,但實(shí)際上因?yàn)閏lass1是通過new來運(yùn)行的,它所屬的對象還沒消失,所以仍然可以通過公開成員來對它們進(jìn)行操作.
??? 注意:這些局部變量(私有成員),被所有在構(gòu)造函數(shù)中定義的公有方法所共享,而且僅被在構(gòu)造函數(shù)中定義的公有方法所共享,這意味著,在prototype 中定義的類成員將不能訪問在構(gòu)造器函數(shù)中定義的局部變量(私有成員),這算是一點(diǎn)缺陷.
??? 使用私有成員,是以犧牲代碼可讀性為代價(jià)的。而且這種實(shí)現(xiàn)更多的是一種JavaScript技巧,因?yàn)樗⒉皇钦Z言本身具有的機(jī)制。但這種利用變量作用域性質(zhì)的技巧,卻是值得借鑒的。
???
??? 3)實(shí)現(xiàn)靜態(tài)成員
??? 靜態(tài)成員屬于一個(gè)類的成員,它可以通過"類名.靜態(tài)成員名"的方式訪問.
??? 在JavaScript中,可以給一個(gè)函數(shù)對象直接添加成員來實(shí)現(xiàn)靜態(tài)成員,因?yàn)楹瘮?shù)也是一個(gè)對象,所以對象的相關(guān)操作,對函數(shù)也同樣適用.例如:
function?class1(){//構(gòu)造函數(shù)
}
//靜態(tài)屬性
class1.staticProperty="sample";
//靜態(tài)方法
class1.staticMethod=function(){
??????alert(class1.staticProperty);
}
//調(diào)用靜態(tài)方法
class1.staticMethod();??? 通過上面的代碼,就為類class1添加了一個(gè)靜態(tài)屬性和靜態(tài)方法,并且在靜態(tài)方法中訪問了該類的靜態(tài)屬性.
??? 如果要給每個(gè)函數(shù)對象都添加通用的靜態(tài)方法,這就需要通過函數(shù)對象所定義的基類:Function來實(shí)現(xiàn)(同樣,要為所有的對象添加方法,用Object來實(shí)現(xiàn)),例如:
//給類Function添加原型方法:show?ArgsCount
Function.prototype.showArgsCount=function(){
??????alert(
this.length);????//顯示函數(shù)定義的形參的個(gè)數(shù)
}
function?class1(a,b){
??????
//定義一個(gè)類
}
//調(diào)用通過Function的prototype定義的類的靜態(tài)方法showArgsCount
class1.?showArgsCount?();??? 可見,通過Function的prototype原型對象,可以給任何函數(shù)都加上通用的靜態(tài)成員,這在實(shí)際開發(fā)中可以起到很大的作用,比如在著名的prototype.js框架中,就給所有的函數(shù)定義了以下兩個(gè)方法:
//將函數(shù)作為一個(gè)對象的方法運(yùn)行
Function.prototype.bind?=?function(object)?{
??
var?__method?=?this;
??
return?function()?{
?????__method.apply(object,?arguments);
??}
}
//將函數(shù)作為事件監(jiān)聽器
Function.prototype.bindAsEventListener?=?function(object)?{
??
var?__method?=?this;
??
return?function(event)?{
????__method.call(object,?event?
||?window.event);
??}
}



轉(zhuǎn)載于:https://www.cnblogs.com/fcrong/archive/2006/08/16/478064.html

總結(jié)

以上是生活随笔為你收集整理的4)公有成员\私有成员和静态成员的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。