国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript常見繼承模式實(shí)例小結(jié)

2024-05-06 15:43:19
字體:
供稿:網(wǎng)友

本文實(shí)例總結(jié)了JavaScript常見繼承模式。分享給大家供大家參考,具體如下:

JavaScript中并沒有傳統(tǒng)的面向?qū)ο笳Z言中的類的概念,但是卻實(shí)現(xiàn)了特殊的繼承機(jī)制。

(閱讀此文您首先需要知道原型的知識(shí))

先來說說第一種繼承方式,原型鏈繼承。

一. 原型鏈繼承

所謂原型鏈繼承,就是讓父類的一個(gè)實(shí)例作為子類的原型。

即 :

parentInstance = new Parent();child.prototype = parentInstance;

這樣,在創(chuàng)建子類的實(shí)例時(shí),子類實(shí)例的__proto__指向父類的實(shí)例(即此時(shí)子類構(gòu)造函數(shù)的prototype屬性),而父類實(shí)例的__proto__又指向父類構(gòu)造函數(shù)的prototype屬性。借用這種方式形成了一條原型鏈。

由于JavaScript中搜索實(shí)例中調(diào)用的變量有如下方式:

    在當(dāng)前實(shí)例中尋找變量名 在當(dāng)前實(shí)例所指向的原型中尋找

假設(shè)原型鏈中有如下繼承關(guān)系:

grandparent(有方法 grandparent.prototype.sayHello) -> parent -> child

當(dāng)在child的實(shí)例child_ming調(diào)用方法 sayHello 時(shí),首先在child_ming中(即只定義在child_ming這一個(gè)實(shí)例中,而非所有實(shí)例中)搜索sayHello,并未找到,然后開始搜索它所指向的原型,即parent的實(shí)例。在parent的實(shí)例中也沒有此方法,開始搜索parent的原型,即grandparent的實(shí)例。在grandparent的實(shí)例中依然沒有找到,又搜索grandparent的原型并找到該方法。

可以看出,這樣便實(shí)現(xiàn)了繼承。

如同在使用prototype創(chuàng)建對象時(shí)遇到的問題,倘若完全使用原型鏈進(jìn)行繼承,會(huì)使得一些需要繼承但不需要在不同實(shí)例間進(jìn)行共享的屬性變得不方便實(shí)現(xiàn)。

下面就要說一說借用構(gòu)造函數(shù)實(shí)現(xiàn)的繼承。

二. 借用構(gòu)造函數(shù)實(shí)現(xiàn)繼承

所謂借用構(gòu)造函數(shù)實(shí)現(xiàn)繼承,即在子類的構(gòu)造函數(shù)中把父類的構(gòu)造函數(shù)借來使用,以求在子類中生成父類的屬性。

看如下代碼:

function Parent(color){  this.color = color;  this.getColor = function(){ alert(this.color); };}function Child(color,size){  Parent.call(this,color);  this.size = size;}

這就是一個(gè)簡單的借用構(gòu)造函數(shù)的繼承。

通過使用父類的構(gòu)造函數(shù),可以使得同一構(gòu)造函數(shù)的不同的實(shí)例的同一屬性擁有不同的值。解決了原型鏈繼承中的屬性共享的弊端。

然而,如同使用構(gòu)造函數(shù)創(chuàng)建對象時(shí)遇到的問題,通過構(gòu)造函數(shù)生成的方法面臨著重復(fù)定義的問題,同一類下的不同實(shí)例擁有各自的方法,而一般來講方法是需要實(shí)現(xiàn)復(fù)用的,沒有必要讓它們擁有各自的方法。

使用組合繼承可以解決這個(gè)問題。

三. 組合繼承(原型鏈與借用構(gòu)造函數(shù))

既然原型鏈可以實(shí)現(xiàn)屬性共享,借用構(gòu)造函數(shù)可以實(shí)現(xiàn)屬性值的私有,不妨將它們結(jié)合起來,這就形成了組合繼承。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 聂荣县| 平乐县| 海门市| 湖南省| 阳西县| 许昌县| 五峰| 宝兴县| 定兴县| 邯郸市| 汽车| 千阳县| 天祝| 都兰县| 扶绥县| 盐津县| 和田县| 五大连池市| 盐源县| 北宁市| 修文县| 山阳县| 巴彦县| 郸城县| 周口市| 汝州市| 奎屯市| 保定市| 洛隆县| 旬邑县| 陆川县| 淮安市| 隆子县| 栾川县| 千阳县| 讷河市| 文水县| 通许县| 巴彦淖尔市| 贡觉县| 无棣县|