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

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

 更新時間:2010年08月05日 13:53:23   作者:  
學(xué)著js的繼承,自己也寫了個。感覺不是很好?,F(xiàn)在很多代碼都封裝成類。
base.js --繼承的實現(xiàn)==========================
【注】:繼承后,如果父類是一個類,則會繼承其屬性,方法(包括用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;//返回繼承后的對象
}
if(fa&&fb){
b.apply(this,a.arguments);
cha(a,b);
this["base"] =new b;//通過base訪問父類
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);
}
}

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

<html>
<head>
<script type="text/javascript" src="base.js"></script>
<script type="text/javascript">
var car2 = {
name:"轎車【父類】",
price:"幾萬【父類】",
start : function(){
alert(this.name+" 已啟動2!【父類】");
},
run : function(){
alert(this.name+" 在行駛當(dāng)中2。。。【父類】");
},
stop: function(){
alert(this.name+" 已停止2!【父類】");
},
remark: function(){return "【父類】2我是一輛 "+this.name+";價值 "+this.price;}
// this.remark = "我是一輛 "+this.name+";價值 "+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||"幾萬[父類]";
this.start = function(){
alert(this.name+" 已啟動![父類]");
};
this.run = function(){
alert(this.name+" 在行駛當(dāng)中。。。[父類]");
};
this.stop= function(){
alert(this.name+" 已停止![父類]");
};
this.remark = function(){return "[父類]我是一輛 "+this.name+";價值 "+this.price;};
// this.remark = "我是一輛 "+this.name+";價值 "+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+"專屬 啟動裝置!");
};
return ("this.name1="+this.name);
}
var BMW2 = function(){
this.extendf(BMW2,car2);
this.name = "寶馬終極2號【子類】";
this.start=function(){
alert(this.name+" 專屬 啟動裝置2號未來!");
};
return ("this.name1="+this.name);
}
var bensi = {
name:"bensi",
price:"130萬",
start:function(){
alert(this.name+" 華麗啟動!");
},
stop:function(){
alert(this.name+" 專用剎車停止!");
}
}
bensi.noExtra=function(){
return "誰敢收稅?";
}
var autuo = {
name:"autuo【子類】",
price:"1萬",
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萬");
testRun(tb);
alert(BMW.noExtra());
}
var ftest2 = function(){
var tb = bensi//("奔馳","120萬");
tb.extendf(bensi,car);
testRun(bensi);
alert(bensi.noExtra());
}
var ftest3 = function(){
var tb = new ChangAn("長安[傳參]","5萬");
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號","65萬");
var scar = document.getElementById("showcar");
scar.innerHTML = tb.remark();
alert(tb.name);
tb.start();
tb.stop();
alert(BMW2.noExtra());
}
//測試輸出
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萬"));//父類為Object時這個會出錯,因為父類本身就沒有
}
</script>
</head>
<body>
js測試:
<input type = "button" value = "寶馬" onclick = "ftest()" >
<input type = "button" value = "奔馳" onclick = "ftest2()" >
<input type = "button" value = "長安" onclick = "ftest3()" >
<input type = "button" value = "奧拓" onclick = "ftest4()" >
<input type = "button" value = "奔馳類的奧拓" onclick = "ftest5()" >
<input type = "button" value = "寶馬2號" onclick = "ftest6()" >
<div id = "showcar"></div>
</body>
</html>

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

相關(guān)文章

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

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

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

    Bootstrap被封裝的彈層

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

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

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

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

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

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

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

    JS+Canvas實現(xiàn)動態(tài)時鐘效果

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

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

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

    ClearTimeout消除閃動實例代碼

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

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

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

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

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

最新評論

兴宁市| 灯塔市| 前郭尔| 淮安市| 南京市| 衡水市| 米林县| 宿松县| 达尔| 应城市| 安新县| 甘德县| 虞城县| 布尔津县| 柯坪县| 黔西| 灌云县| 昌邑市| 中江县| 麟游县| 凌云县| 井研县| 黔西县| 和田县| 赤水市| 册亨县| 岳普湖县| 边坝县| 绥滨县| 磐石市| 集贤县| 安塞县| 华坪县| 石城县| 文安县| 容城县| 铜山县| 商丘市| 津市市| 屯门区| 濉溪县|