重載:由于Javascrip " /> 亚洲免费va在线观看,双性被疯狂灌满精NP,成年人深夜福利

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

javascript 面向?qū)ο缶幊袒A(chǔ) 多態(tài)

Javascript已經(jīng)可以模擬出面向?qū)ο蟮姆庋b和繼承特性,但是不幸的是Javascript對(duì)多態(tài)特性的支持非常弱!其它面向?qū)ο笳Z言的多態(tài)一般都由方法重載和虛方法來實(shí)現(xiàn)多態(tài),Javascript也通過這兩種途徑來實(shí)現(xiàn)!

重載:由于Javascript是弱類型的語言,而且又支持可變參數(shù),當(dāng)我們定義重載方法的時(shí)候,解釋器無法通過參數(shù)類型和參數(shù)個(gè)數(shù)來區(qū)分不同的重載方法,因此方法重載是不被支持的!當(dāng)先后定義了同名的方法的時(shí)候,后定義的方法會(huì)覆蓋先定義的方法!

既然解釋器無法分辨重載方法,那就手動(dòng)區(qū)分不同的方法:
復(fù)制代碼 代碼如下:
var MyClass=function(){
var AddNum=function(a,b){
return a+b;
}
var AddString=function(a,b){
return "I am here"+a+b;
}
this.Add=function(a,b){
if(typeof(a)=="number")
return AddNum(a,b);
else
return AddString(a,b);
}
}
var MyObj = new MyClass();
var X = MyObj.Add(5,6);
var Y = MyObj.Add("A","FFFFFF");
alert(X); //結(jié)果:11
alert(Y); //結(jié)果:I am hereAFFFFFF

虛方法:
復(fù)制代碼 代碼如下:
function BaseClass(){
this.Hello=function(){
return this.Say();
}
}
function MyClassA(){
this.Say=function(){
return "Hello";
}
}
function MyClassB(){
this.Say=function(){
return "This is MyClassB";
}
}
MyClassA.prototype = new BaseClass();
MyClassB.prototype = new BaseClass();
var ObjA = new MyClassA();
var XX = ObjA.Hello();
alert(XX); //結(jié)果:Hello
var ObjB = new MyClassB();
var YY = ObjB.Hello();
alert(YY); //結(jié)果:This is MyClassB

由于Javascript解釋執(zhí)行的特性,因此可以再基類中調(diào)用將要在派生類中定義的方法,那么這個(gè)基類方法就相當(dāng)于虛方法,可以實(shí)現(xiàn)模擬多態(tài)!
js的重載和重寫(覆寫):
重載的意思是,“同一個(gè)名字的函數(shù)(注意這里包括函數(shù))或方法可以有多個(gè)實(shí)現(xiàn),它們依靠參數(shù)的類型和(或)參數(shù)的個(gè)數(shù)來區(qū)分識(shí)別”。而重寫(覆蓋)的意思是,“子類中可以定義與父類中同名,并且參數(shù)類型和個(gè)數(shù)也相同的方法,這些方法的定義后,在子類的實(shí)例化對(duì)象中,父類中繼承的這些同名方法將被隱藏”。重載的英文是overload,覆蓋的英文是override。好了,概念介紹到這里,你猜到我要說什么了嗎?嘿嘿,Code is cheap.看重載代碼:
復(fù)制代碼 代碼如下:
// 通過函數(shù)的arguments屬性實(shí)現(xiàn)重載
function add() {
var sum = 0 ;
for ( var i = 0 ; i < arguments.length; i ++ ) {
sum += arguments[i];
}
return sum;
}
function test() {
alert(add());
alert(add( 1 , 2 ));
alert(add( 1 , 2 , 3 ));
}

通過代碼運(yùn)行結(jié)果,這樣就實(shí)現(xiàn)了任意多個(gè)參數(shù)加法函數(shù)的重載了。當(dāng)然,你還可以在函數(shù)中通過 instanceof 或者 constructor 來判斷每個(gè)參數(shù)的類型,來決定后面執(zhí)行什么操作,實(shí)現(xiàn)更為復(fù)雜的函數(shù)或方法重載。總之,Javascript 的重載,是在函數(shù)中由用戶自己通過操作 arguments 這個(gè)屬性來實(shí)現(xiàn)的。關(guān)于arguments的特性,前面我已經(jīng)做了簡(jiǎn)單介紹,參考拙文:http://blog.csdn.NET/zhanglingdll_39/archive/2009/08/20/4465670.ASPx 。
下面重點(diǎn)理解js重寫的實(shí)現(xiàn):
// 為類添加靜態(tài)方法inherit表示繼承于某類
Function.prototype.inherit = function (baseClass) {
for ( var p in baseClass.prototype) {
this .prototype[p] = baseClass.prototype[p];
}
}
// js實(shí)現(xiàn)重寫
function parentClass() { // 父類
}
parentClass.prototype.method = function () {
alert( " parentClass method " );
}
function subClass() { // 子類
}
// 復(fù)制代碼 代碼如下:
下面這一句和subClass.prototype = new parentClass();等價(jià)
subClass.inherit(parentClass);
// subClass.prototype.method = function() { // 子類重寫了父類的方法 -- 去掉注釋運(yùn)行試試看
// alert("subClass method");
// }
function test() {
var obj = new subClass();
obj.method();
}
這樣,子類中定義的method 就覆蓋了從父類中繼承來的method 方法了。這是你可能會(huì)問,如何在子類中調(diào)用父類的method方法呢?好的,看實(shí)現(xiàn)如下:
// 為類添加靜態(tài)方法inherit表示繼承于某類
Function.prototype.inherit = function (baseClass) {
for ( var p in baseClass.prototype) {
this .prototype[p] = baseClass.prototype[p];
}
}
/* 參考文章:http://menjoy.Javaeye.com/blog/127847 */
// js實(shí)現(xiàn)重寫
function parentClass() {
this .method = function () {
alert( " parentClass method " );
}
}
function subClass() {
var method = this .method;
this .method = function () {
method.call( this );
alert( " subClass method " );
}
}
subClass.prototype = new parentClass();
// subClass.inherit(parentClass); //這一句貌似和上一句subClass.prototype = new parentClass();等價(jià),其實(shí)呢????(注釋上一行,運(yùn)行這一行看看)
subClass.prototype.constructor = subClass;
function test() {
var obj = new subClass();
obj.method();
}

好了,關(guān)于多態(tài)的介紹就到這里。js面向?qū)ο缶幊酞q如浩瀚海洋廣闊無邊,我這三篇參考別人的文章寫出來的js面向?qū)ο蠡A(chǔ)只能當(dāng)作入門者學(xué)習(xí)的參考。學(xué)無止境,參考了網(wǎng)上幾篇老大們的牛文,深知自身技術(shù)的淺薄,對(duì)于已經(jīng)超越了解階段的讀者,還是看看園子里高人的技術(shù)文章吧。我這里要先拜謝園子里的高人了。

JavaScript技術(shù)javascript 面向?qū)ο缶幊袒A(chǔ) 多態(tài),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 99久久国产综合精品网成人影院 | 男人插曲女人的视频 | 二次元美女扒开内裤喷水 | 精品亚洲AV无码蜜芽麻豆 | 大桥未久在线看 | 婷婷午夜影院 | 闺蜜扒开我尿口使劲揉 | 成人无码精品1区2区3区免费看 | 国产人妻精品无码AV在线五十路 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 高傲教师麻麻被同学调教123 | 欧美巨大xxxx做受高清 | 香蕉久久夜色精品国产小说 | 日本xxxx8888| 亚洲欧美综合中文 | 国产精品美女久久久久AV超清 | 奇米精品一区二区三区在线观看 | 无限资源在线观看完整版免费下载 | 超碰97人人做人人爱网站 | 伦理片在线线看手机版 | 0855午夜福利伦理电影 | 精品第一国产综合精品蜜芽 | 午夜伦4480yy妇女久久 | 天堂视频在线观看免费完整版 | 2017欧美狠狠色 | 午夜性色一区二区三区不卡视频 | 热思思| 亚洲视频在线观看网站 | 日日天干夜夜狠狠爱 | 亚洲AV久久无码精品蜜桃 | 亚洲人成人77777在线播放 | 高清国产mv视频在线观看 | 玖玖爱在线播放 | 扒开屁股眼往里面夹东西 | 亚洲AV久久无码精品蜜桃 | 韩剧甜性涩爱 | 尹人久久大香找蕉综合影院 | 99久久免热在线观看 | 灌满内射HP1V1 | 内射白浆一区二区在线观看 | 久久女婷五月综合色啪 |