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

javascript 用原型繼承來實現(xiàn)對象系統(tǒng)

 更新時間:2010年03月22日 13:19:20   作者:  
對象系統(tǒng)中的繼承特性有三種方式:基于類,基于原型,基于元類
javascript中,對象沒有原型,而構(gòu)造器有原型
原型的含義:如果構(gòu)造器有一個原型對象 A,則由該構(gòu)造器創(chuàng)建的實例都必然復(fù)制自A
復(fù)制代碼 代碼如下:

/*申明2個構(gòu)造器*/
var flower=function(){
this.name="nokia";
}
var flower2=function(){
this.age=22;
}
/*原型鏈*/
flower2.prototype=new flower();
/*根據(jù)剛才原型的定義,實例obj必然復(fù)制自new flower();*/
obj=new flowe2();
/*從父類繼承的屬性*/
alert(obj.name); //==>"nokia"
alert(obj.age); //==>22

一個構(gòu)造器產(chǎn)生的實例,其constructor屬性默認總是指向該構(gòu)造器
alert(obj.constructor);//==>flower
構(gòu)造器原型的constructor屬性 指向構(gòu)造器本身
alert(flower.prototype.constructor==flower);//==>true
constructor會與原型繼承發(fā)生的沖突
復(fù)制代碼 代碼如下:

function flower(){}
function flower2(){}
flower2.prototype=new flower();
var obj1=new flower();
var obj2=new flower2();
/*問題出現(xiàn)了,2個實例的constructor屬性都指向flower*/
alert(obj1.constructor==obj2.constructor);
/*obj1和obj2是不同的構(gòu)造器產(chǎn)生的實例,缺指向相同的構(gòu)造器,顯然出了問題*/

解決的方法
復(fù)制代碼 代碼如下:

flower2.prototype=new flower();
/*重置原型后,修改原型的constructor屬性*/
flower2.prototype.constructor=flower2
或每次構(gòu)造實例時都重寫constructor屬性
function flower2(){
this.constructor=arguments.callee;
}
flower2.prototype=new flower();

此外原型繼承沒有提供調(diào)用父類的方法
然而我們基于原型繼承,通過靜態(tài)變量記錄父類來彌補這一缺陷
復(fù)制代碼 代碼如下:

var Class={
create:function()
{
var _class=function()
{
this.init.apply(this,arguments);
}
_class.prototype.init=Function.prototype.init;
try{
return _class;
}finally{
_class=null;
}
}
};
//默認構(gòu)造函數(shù)
Function.prototype.init=function(){}
//方法擴展
Function.prototype.extend=function(list)
{
for(var i in list)this.prototype[i]=list[i];
return this;
}
//多級繼承
Function.prototype.inherits=function(parent)
{
//繼承的深度級別
var _depth=0;
//方法屬性移植
this.extend(new parent());
//初始化構(gòu)造函數(shù) 類的繼承通常不繼承構(gòu)造函數(shù)
this.prototype.init=Function.prototype.init;
//類的靜態(tài)父類
this.parent=parent;
//執(zhí)行父類函數(shù)
this.prototype.parent=function(name)
{
//若沒有參數(shù)則執(zhí)行構(gòu)造函數(shù)
if(!name)name='init';
//即將執(zhí)行的父類
var _parent=parent;
//若當(dāng)前已經(jīng)在父類中執(zhí)行則繼續(xù)向上尋找超類
if(_depth)
{
for(var i=0;i<_depth;i++)
{
_parent=_parent.parent;
}
}
//設(shè)置好級別
_depth++;
try{
//執(zhí)行函數(shù)并返回值
return _parent.prototype[name].apply(this,Array.prototype.slice.apply(arguments,[1]));
}catch(e){
throw(e);
}finally{
//恢復(fù)級別
_depth--;
}
}
return this;
}

例子:
復(fù)制代碼 代碼如下:

//創(chuàng)建名為class1的構(gòu)造器
var class1=Class.create().extend({
b:function()
{
alert('clas');
alert(this.c);
},
c:100
});
//創(chuàng)建"對象"(構(gòu)造器)的實例
var s=new class1();
s.b();// ==>"clas",100

繼承父類,并調(diào)用父類的方法:
復(fù)制代碼 代碼如下:

var test=Class.create().inherits(class1).extend({
b:function()
{
alert('test');
this.parent('b')
},
c:110
});

相關(guān)文章

  • JavaScript設(shè)計模式之命令模式

    JavaScript設(shè)計模式之命令模式

    這篇文章主要介紹了JavaScript設(shè)計模式之命令模式,命令設(shè)計模式是由發(fā)令者、執(zhí)行者、命令對象三部分構(gòu)成,文章由此展開詳細的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-06-06
  • 微信小程序canvas拖拽、截圖組件功能

    微信小程序canvas拖拽、截圖組件功能

    這篇文章主要介紹了微信小程序canvas拖拽、截圖組件功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 企業(yè)微信掃碼登錄網(wǎng)頁功能實現(xiàn)代碼

    企業(yè)微信掃碼登錄網(wǎng)頁功能實現(xiàn)代碼

    這篇文章主要介紹了企業(yè)微信掃碼登錄網(wǎng)頁功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 解析Json字符串的三種方法日常常用

    解析Json字符串的三種方法日常常用

    下面將介紹日常中使用的三種解析json字符串的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • 微信小程序有旋轉(zhuǎn)動畫效果的音樂組件實例代碼

    微信小程序有旋轉(zhuǎn)動畫效果的音樂組件實例代碼

    這篇文章主要介紹了微信小程序有旋轉(zhuǎn)動畫效果的音樂組件,需要的朋友可以參考下
    2018-08-08
  • JS創(chuàng)建自定義對象的六種方法總結(jié)

    JS創(chuàng)建自定義對象的六種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于JS創(chuàng)建自定義對象的六種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • javascript 星級評分效果(手寫)

    javascript 星級評分效果(手寫)

    今天上午抽空隨手寫了個星級評分的效果,給大家分享下。由于水平有限,如有問題請指出;首先要準備一張星星的圖片,灰色是默認狀態(tài),黃色是選擇狀態(tài),需要的朋友可以參考下
    2012-12-12
  • TypeScript入門-基本數(shù)據(jù)類型

    TypeScript入門-基本數(shù)據(jù)類型

    本文主要介紹了TypeScript基本數(shù)據(jù)類型的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 微信小程序記錄用戶移動軌跡的實戰(zhàn)記錄

    微信小程序記錄用戶移動軌跡的實戰(zhàn)記錄

    最近遇到一個小程序的開發(fā)需求,直接可以通過小程序就記錄運動軌跡,所以這篇文章主要給大家介紹了關(guān)于微信小程序記錄用戶移動軌跡的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • js實現(xiàn)簡單擲骰子小游戲

    js實現(xiàn)簡單擲骰子小游戲

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡單搖篩子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論

沧州市| 宁化县| 抚宁县| 盐津县| 武平县| 苗栗县| 平陆县| 密山市| 东兴市| 建宁县| 岗巴县| 始兴县| 黔江区| 黔江区| 肃北| 同江市| 三亚市| 昌吉市| 台州市| 通辽市| 霍城县| 宜州市| 台山市| 蚌埠市| 甘泉县| 公安县| 陕西省| 丹巴县| 龙游县| 黔南| 陕西省| 六盘水市| 永寿县| 阿勒泰市| 石屏县| 肥城市| 芮城县| 怀集县| 法库县| 礼泉县| 鞍山市|