最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js繼承的實(shí)現(xiàn)代碼

 更新時(shí)間:2010年08月05日 13:53:23   作者:  
學(xué)著js的繼承,自己也寫了個(gè)。感覺(jué)不是很好?,F(xiàn)在很多代碼都封裝成類。
base.js --繼承的實(shí)現(xiàn)==========================
【注】:繼承后,如果父類是一個(gè)類,則會(huì)繼承其屬性,方法(包括用prototype聲明的),靜態(tài)方法,否則只有屬性和方法。
復(fù)制代碼 代碼如下:

Object.prototype.extendf= function (a,b){
if(!a||!b) return;
var fa = typeof a=="function";
var fb = typeof b=="function";
var cha = function(a,b){
for(var c in b){
if(a[c]==undefined)//子類重寫
a[c]=b[c];
}
return a;//返回繼承后的對(duì)象
}
if(fa&&fb){
b.apply(this,a.arguments);
cha(a,b);
this["base"] =new b;//通過(guò)base訪問(wèn)父類
return cha(this,b.prototype);
}
else if(!fa&&fb){
cha(a,new b);
a["base"]= new b;
return cha(a,b);
}else if(fa&&!fb){
cha(a,b);
this["base"]=b;
return cha(this,b);
}else if(!fa&&!fb){
a["base"]=b;
return cha(a,b);
}
}

測(cè)試頁(yè):用法
復(fù)制代碼 代碼如下:

<html>
<head>
<script type="text/javascript" src="base.js"></script>
<script type="text/javascript">
var car2 = {
name:"轎車【父類】",
price:"幾萬(wàn)【父類】",
start : function(){
alert(this.name+" 已啟動(dòng)2!【父類】");
},
run : function(){
alert(this.name+" 在行駛當(dāng)中2。。。【父類】");
},
stop: function(){
alert(this.name+" 已停止2!【父類】");
},
remark: function(){return "【父類】2我是一輛 "+this.name+";價(jià)值 "+this.price;}
// this.remark = "我是一輛 "+this.name+";價(jià)值 "+this.price;
}
//car2.prototype.extra = function(ext){
// return this.name+" 的關(guān)稅2是:"+ext;
//}
car2.protect = "【父類】2保護(hù)的";
car2.noExtra = function(){
return car.protect+" 不交關(guān)稅2【父類】";
}
var car = function(name,price){
this.name=name||"轎車 [父類]";
this.price=price||"幾萬(wàn)[父類]";
this.start = function(){
alert(this.name+" 已啟動(dòng)![父類]");
};
this.run = function(){
alert(this.name+" 在行駛當(dāng)中。。。[父類]");
};
this.stop= function(){
alert(this.name+" 已停止![父類]");
};
this.remark = function(){return "[父類]我是一輛 "+this.name+";價(jià)值 "+this.price;};
// this.remark = "我是一輛 "+this.name+";價(jià)值 "+this.price; //注意,這樣做 name 和price 將得不到傳參,故注釋
}
car.prototype.extra = function(ext){
return this.name+" 的關(guān)稅是[父類]:"+ext;
}
car.protect = "[父類]保護(hù)的";
car.noExtra = function(){
return car.protect+" 不交關(guān)稅[父類]";
}
var BMW = function(){
this.extendf(BMW,car);
this.name = "BMW【子類】";
this.start=function(){
alert(this.name+"專屬 啟動(dòng)裝置!");
};
return ("this.name1="+this.name);
}
var BMW2 = function(){
this.extendf(BMW2,car2);
this.name = "寶馬終極2號(hào)【子類】";
this.start=function(){
alert(this.name+" 專屬 啟動(dòng)裝置2號(hào)未來(lái)!");
};
return ("this.name1="+this.name);
}
var bensi = {
name:"bensi",
price:"130萬(wàn)",
start:function(){
alert(this.name+" 華麗啟動(dòng)!");
},
stop:function(){
alert(this.name+" 專用剎車停止!");
}
}
bensi.noExtra=function(){
return "誰(shuí)敢收稅?";
}
var autuo = {
name:"autuo【子類】",
price:"1萬(wàn)",
stop:function(){
alert(this.name+" 奧拓失靈了!");
}
}
function ChangAn(){
this.extendf(ChangAn,car);
// this.name = "CHANGAN【子類】";
this.run=function(){
alert(this.name+" 走的有點(diǎn)慢。。。");
}
}
var ftest = function(){
var tb = new BMW("寶馬","70萬(wàn)");
testRun(tb);
alert(BMW.noExtra());
}
var ftest2 = function(){
var tb = bensi//("奔馳","120萬(wàn)");
tb.extendf(bensi,car);
testRun(bensi);
alert(bensi.noExtra());
}
var ftest3 = function(){
var tb = new ChangAn("長(zhǎng)安[傳參]","5萬(wàn)");
testRun(tb);
alert(ChangAn.noExtra());
}
var ftest4 = function(){
var tb = autuo
tb.extendf(autuo,car2);
testRun(tb);
alert(autuo.noExtra());
}
var ftest5 = function(){
var tb = autuo
tb.extendf(autuo,bensi);
alert(tb.name);
tb.start();
tb.stop();
alert(autuo.noExtra());
}
var ftest6 = function(){
var tb = new BMW2("寶馬2號(hào)","65萬(wàn)");
var scar = document.getElementById("showcar");
scar.innerHTML = tb.remark();
alert(tb.name);
tb.start();
tb.stop();
alert(BMW2.noExtra());
}
//測(cè)試輸出
function testRun(tb){
var scar = document.getElementById("showcar");
if(!scar) return false;
scar.innerHTML = tb.remark();
tb.base.start();
tb.start();
tb.base.run();
tb.run();
tb.base.stop();
tb.stop();
alert(tb.extra("1萬(wàn)"));//父類為Object時(shí)這個(gè)會(huì)出錯(cuò),因?yàn)楦割惐旧砭蜎](méi)有
}
</script>
</head>
<body>
js測(cè)試:
<input type = "button" value = "寶馬" onclick = "ftest()" >
<input type = "button" value = "奔馳" onclick = "ftest2()" >
<input type = "button" value = "長(zhǎng)安" onclick = "ftest3()" >
<input type = "button" value = "奧拓" onclick = "ftest4()" >
<input type = "button" value = "奔馳類的奧拓" onclick = "ftest5()" >
<input type = "button" value = "寶馬2號(hào)" onclick = "ftest6()" >
<div id = "showcar"></div>
</body>
</html>

ps:沒(méi)有注意到性能問(wèn)題,往大家改善
想只用一個(gè)參數(shù),不知道大家有沒(méi)有辦法?
嵌套類 沒(méi)試過(guò)。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)訂單倒計(jì)時(shí)

    微信小程序?qū)崿F(xiàn)訂單倒計(jì)時(shí)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)訂單倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Bootstrap被封裝的彈層

    Bootstrap被封裝的彈層

    這篇文章主要介紹了Bootstrap被封裝的彈層 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Js實(shí)現(xiàn)兩個(gè)跨域頁(yè)面進(jìn)行跳轉(zhuǎn)傳參的方案詳解

    Js實(shí)現(xiàn)兩個(gè)跨域頁(yè)面進(jìn)行跳轉(zhuǎn)傳參的方案詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript中實(shí)現(xiàn)兩個(gè)跨域頁(yè)面進(jìn)行跳轉(zhuǎn)傳參的方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Js利用正則表達(dá)式去除字符串的中括號(hào)

    Js利用正則表達(dá)式去除字符串的中括號(hào)

    這篇文章主要給大家介紹了關(guān)于Js利用正則表達(dá)式去除字符串的中括號(hào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • js字符編碼函數(shù)區(qū)別分析

    js字符編碼函數(shù)區(qū)別分析

    js對(duì)文字編碼有3個(gè)函數(shù): escape,encodeURI,encodeURIComponent, 對(duì)應(yīng)的解碼函數(shù):unescape,decodeURI,decodeURIComponent
    2008-06-06
  • JS+Canvas實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘效果

    JS+Canvas實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了JS+Canvas實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 淺析JS獲取url中的參數(shù)實(shí)例代碼

    淺析JS獲取url中的參數(shù)實(shí)例代碼

    本文給大家介紹js獲取url中的參數(shù)實(shí)例代碼,通過(guò)取得整個(gè)地址欄,取得所有參數(shù)以及各個(gè)參數(shù)放到數(shù)組里,代碼比較簡(jiǎn)單,有需要的朋友可以參考下
    2016-06-06
  • ClearTimeout消除閃動(dòng)實(shí)例代碼

    ClearTimeout消除閃動(dòng)實(shí)例代碼

    本文給大家介紹ClearTimeout消除閃動(dòng)相關(guān)知識(shí),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • 用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽

    用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽

    本文介紹了用file標(biāo)簽實(shí)現(xiàn)多圖文件上傳預(yù)覽的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • uniapp獲取手機(jī)通知權(quán)限實(shí)現(xiàn)demo

    uniapp獲取手機(jī)通知權(quán)限實(shí)現(xiàn)demo

    這篇文章主要為大家介紹了uniapp獲取手機(jī)通知權(quán)限實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論

鄂托克前旗| 鄂伦春自治旗| 伊宁县| 克山县| 和政县| 乐业县| 定兴县| 揭阳市| 桐梓县| 霍林郭勒市| 静安区| 林芝县| 杭锦旗| 射阳县| 界首市| 巢湖市| 锡林郭勒盟| 新龙县| 团风县| 思南县| 确山县| 信宜市| 张家界市| 民勤县| 林周县| 洪雅县| 万载县| 江阴市| 德格县| 洮南市| 正安县| 靖州| 肇庆市| 阿坝| 连城县| 嘉峪关市| 霍邱县| 资兴市| 皮山县| 濉溪县| 祁连县|