成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

javaScript面向?qū)ο缶幊?繼承(一)

YorkChen / 2288人閱讀

摘要:組合繼承前面兩種模式的特點(diǎn)類式繼承通過(guò)子類的原型對(duì)父類實(shí)例化實(shí)現(xiàn)的,構(gòu)造函數(shù)式繼承是通過(guò)在子類的構(gòu)造函數(shù)作用環(huán)境中執(zhí)行一次父類的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的。

類有三部分

構(gòu)造函數(shù)內(nèi)的,供實(shí)例化對(duì)象復(fù)制用的

構(gòu)造函數(shù)外的,直接通過(guò)點(diǎn)語(yǔ)法添加的,供類使用,實(shí)例化對(duì)象訪問(wèn)不到

類的原型中的,實(shí)例化對(duì)象可以通過(guò)其原型鏈間接地訪問(wèn)到,也是供所有實(shí)例化對(duì)象所共用的。

類式繼承

類的原型對(duì)象的作用就是為類的原型添加共有方法,但類不能訪問(wèn)這些屬性和方法,只有通過(guò)原型prototype來(lái)訪問(wèn)。

//類式繼承
//聲明父類
function SuperClass() {
    this.superValue = true;
}
//為父類添加共有方法
SuperClass.prototype.getSuperValue = function () {
    return this.superValue;
};
//聲明子類
function SubClass() {
    this.subValue = false;
}
//繼承父類
SubClass.prototype = new SuperClass();
//為子類添加共有方法
SubClass.prototype.getSubValue = function () {
    return this.subValue;
};
var instance = new SubClass();
console.log(instance.getSuperValue());//true可以這樣使用子類
console.log(instance.getSubValue());//false
console.log(instance instanceof SuperClass);//true
console.log(instance instanceof SubClass);//true
console.log(SubClass instanceof SuperClass);//false

類式繼承的兩個(gè)缺點(diǎn):
一、子類通過(guò)其原型prototype對(duì)父類實(shí)例化,繼承了父類。父類的共有屬性要是引用類型,就會(huì)在子類中被所有實(shí)例共用,一個(gè)子類的實(shí)例更改子類原型從父類構(gòu)造函數(shù)中繼承的共有屬性就會(huì)直接影響其他子類。
二、由于子類實(shí)現(xiàn)的繼承是靠其原型prototype對(duì)父類的實(shí)例化實(shí)現(xiàn)的,因此在創(chuàng)建父類的時(shí)候,無(wú)法向父類傳遞參數(shù),在實(shí)例化父類的時(shí)候也無(wú)法對(duì)父類構(gòu)造函數(shù)內(nèi)的屬性進(jìn)行初始化。

構(gòu)造函數(shù)繼承
//構(gòu)造函數(shù)式繼承
//聲明父類
function SuperClass(id) {
    //引用類型共有屬性
    this.books = ["javascript","html","css"];
    //值類型共有屬性
    this.id = id;
}
//父類聲明原型方法
SuperClass.prototype.showBooks = function () {
    console.log(this.books);
}
//聲明子類
function SubClass(id) {
    //繼承父類
    SuperClass.call(this,id);//將子類的變量在父類中執(zhí)行一遍
}
//創(chuàng)建第一個(gè)子類實(shí)例
var instance1 = new SubClass(10);
var instance2 = new SubClass(11);
instance1.books.push("設(shè)計(jì)模式");
console.log(instance1.books);//[ "javascript", "html", "css", "設(shè)計(jì)模式" ]
console.log(instance1.id);//10
console.log(instance2.books);//[ "javascript", "html", "css" ]
console.log(instance2.id);//11
instance1.showBooks();//[ "javascript", "html", "css", "設(shè)計(jì)模式" ]

由于這種類型的繼承沒(méi)有涉及原型prototype,所有父類的原型方法自然不會(huì)被子類繼承,而如果想要被子類繼承就必須放在構(gòu)造函數(shù)中,這樣創(chuàng)建的每個(gè)實(shí)例都會(huì)多帶帶擁有一份而不能共用,違背了代碼復(fù)用原則。

組合繼承

前面兩種模式的特點(diǎn):類式繼承通過(guò)子類的原型prototype對(duì)父類實(shí)例化實(shí)現(xiàn)的,構(gòu)造函數(shù)式繼承是通過(guò)在子類的構(gòu)造函數(shù)作用環(huán)境中執(zhí)行一次父類的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)的。組合繼承同時(shí)做到了這兩點(diǎn)。

//組合式繼承
//聲明父類
function SuperClass(name) {
    //值類型共有屬性
    this.name = name;
    //引用類型共有屬性
    this.books = ["html","css","javaScript"];
}
//父類原型共有方法
SuperClass.prototype.getName = function () {
    console.log(this.name);
}
//聲明子類
function SubClass(name,time) {
    //構(gòu)造函數(shù)式繼承父類name屬性
    SuperClass.call(this,name);
    //子類中新增共有屬性
    this.time = time;
}
//類式繼承 子類原型繼承父類
SubClass.prototype = new SuperClass();
//子類原型方法
SubClass.prototype.getTime =function () {
    console.log(this.time);
}
var instance1 = new SubClass("js",2018);
instance1.books.push("設(shè)計(jì)模式");
console.log(instance1.books);//[ "html", "css", "javaScript", "設(shè)計(jì)模式" ]
instance1.getName();//js
instance1.getTime();//2018
var instance2 = new SubClass("css",2018);
console.log(instance2.books);//[ "html", "css", "javaScript" ]
instance2.getName();//css
instance2.getTime();//2018

缺點(diǎn):在使用構(gòu)造函數(shù)繼承時(shí)執(zhí)行了一遍父類的構(gòu)造函數(shù),而在實(shí)現(xiàn)子類原型的類式繼承時(shí)又調(diào)用一遍父類構(gòu)造器,因此父類構(gòu)造器調(diào)用了兩遍。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/97866.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評(píng)論0 收藏0
  • JavaScript面向對(duì)象編程——面向對(duì)象

    摘要:面向?qū)ο竺嫦驅(qū)ο蟮母攀雒嫦驅(qū)ο笫鞘裁疵嫦驅(qū)ο缶幊痰娜Q是,簡(jiǎn)稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑?duì)象相互協(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊痰纳礁柚饕奶卣魇欠庋b繼承多態(tài)。 面向?qū)ο?面向?qū)ο蟮母攀?面向?qū)ο笫鞘裁?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡(jiǎn)稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)...

    SimonMa 評(píng)論0 收藏0
  • JS對(duì)象(1)重新認(rèn)識(shí)面向對(duì)象

    摘要:對(duì)象重新認(rèn)識(shí)面向?qū)ο竺嫦驅(qū)ο髲脑O(shè)計(jì)模式上看,對(duì)象是計(jì)算機(jī)抽象現(xiàn)實(shí)世界的一種方式。除了字面式聲明方式之外,允許通過(guò)構(gòu)造器創(chuàng)建對(duì)象。每個(gè)構(gòu)造器實(shí)際上是一個(gè)函數(shù)對(duì)象該函數(shù)對(duì)象含有一個(gè)屬性用于實(shí)現(xiàn)基于原型的繼承和共享屬性。 title: JS對(duì)象(1)重新認(rèn)識(shí)面向?qū)ο? date: 2016-10-05 tags: JavaScript 0x00 面向?qū)ο?從設(shè)計(jì)模式上看,對(duì)象是...

    superw 評(píng)論0 收藏0
  • 面向對(duì)象JavaScript

    摘要:是完全的面向?qū)ο笳Z(yǔ)言,它們通過(guò)類的形式組織函數(shù)和變量,使之不能脫離對(duì)象存在。而在基于原型的面向?qū)ο蠓绞街校瑢?duì)象則是依靠構(gòu)造器利用原型構(gòu)造出來(lái)的。 JavaScript 函數(shù)式腳本語(yǔ)言特性以及其看似隨意的編寫(xiě)風(fēng)格,導(dǎo)致長(zhǎng)期以來(lái)人們對(duì)這一門(mén)語(yǔ)言的誤解,即認(rèn)為 JavaScript 不是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從?duì)語(yǔ)言感悟的角度闡述為什...

    novo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<