亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

深入理解 Javascript 之 繼承

wuyangnju / 1941人閱讀

摘要:繼承繼承子類(lèi)可以使用父類(lèi)的所有功能,并且對(duì)這些功能進(jìn)行擴(kuò)展。類(lèi)繼承父類(lèi)父類(lèi)添加共有方法子類(lèi)繼承父類(lèi)子類(lèi)添加共有方法其中最核心的一句代碼是將原型指向了父類(lèi)的原型對(duì)象。

繼承
繼承:子類(lèi)可以使用父類(lèi)的所有功能,并且對(duì)這些功能進(jìn)行擴(kuò)展。繼承的過(guò)程,就是從一般到特殊的過(guò)程。
類(lèi)繼承
// 父類(lèi)
var supperClass = function() {
  var id = 1;
  this.name = ["js"];
  this.superVal = function() {
    console.log("supreVal is true");
    console.log(id);
  }
}
// 父類(lèi)添加共有方法
supperClass.prototype.getSupperVal = function () {
  return this.superVal();
}

// 子類(lèi)
var subClass = function() {
  this.subVal = function() {
    console.log("this is subVal")
  }
}

// 繼承父類(lèi)
subClass.prototype = new supperClass();

// 子類(lèi)添加共有方法
subClass.prototype.getsubVal = function() {
  return this.subVal();
}    

var sub = new subClass();

sub.getSupperVal();   //superValue is true
sub.getsubVal();     //this is subValue
console.log(sub.name);
sub.name.push("java");  //["javascript"]

var sub2 = new subClass();
console.log(sub2.name); // ?["js", "java"]

其中最核心的一句代碼是SubClass.prototype = new SuperClass() ;

將原型__proto__ 指向了父類(lèi)的原型對(duì)象。這樣子類(lèi)就可以訪問(wèn)父類(lèi)的public 和protected 的屬性和方法,同時(shí),父類(lèi)中的private 的屬性和方法不會(huì)被子類(lèi)繼承。

缺點(diǎn)

敲黑板,如上述代碼的最后一段,使用類(lèi)繼承的方法,如果父類(lèi)的構(gòu)造函數(shù)中有【引用類(lèi)型】,就會(huì)在子類(lèi)中被所有實(shí)例共用,因此一個(gè)子類(lèi)的實(shí)例如果更改了這個(gè)引用類(lèi)型,就會(huì)影響到其他子類(lèi)的實(shí)例。
構(gòu)造函數(shù)繼承
正式因?yàn)橛辛松鲜龅娜秉c(diǎn),才有了構(gòu)造函數(shù)繼承,構(gòu)造函數(shù)繼承的核心思想就是SuperClass.call(this,id),直接改變this的指向,使通過(guò)this創(chuàng)建的屬性和方法在子類(lèi)中復(fù)制一份,因?yàn)槭嵌鄮?fù)制的,所以各個(gè)實(shí)例化的子類(lèi)互不影響。但是會(huì)造成內(nèi)存浪費(fèi)的問(wèn)題
var parentClass = function(name, id) {
  this.name = name;
  this.id = id;
  this.getName = function(){
    console.log(this.name)
  }
}

parentClass.prototype.show = function( ) {
  console.log(this.id)
}

var childClass = function(name, id) {
  parentClass.call(this, name, id); 
}
var subClass = new childClass("zjj", 10);

我們先來(lái)總結(jié)一下類(lèi)繼承和構(gòu)造函數(shù)繼承的優(yōu)缺點(diǎn)
= 類(lèi)繼承 構(gòu)造函數(shù)繼承
核心思想 子類(lèi)的原型是父類(lèi)實(shí)例化的對(duì)象 SuperClass.call(this,id)
優(yōu)點(diǎn) 子類(lèi)實(shí)例化對(duì)象的屬性和方法都指向父類(lèi)的原型 每個(gè)實(shí)例化的子類(lèi)互不影響
缺點(diǎn) 子類(lèi)之間可能會(huì)互相影響 內(nèi)存浪費(fèi)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/96827.html

相關(guān)文章

  • 深入理解JavaScript系列8:S.O.L.I.D五大原則里氏替換原則

    摘要:前言本章我們要講解的是五大原則語(yǔ)言實(shí)現(xiàn)的第篇,里氏替換原則。因此,違反了里氏替換原則。與行為有關(guān),而不是繼承到現(xiàn)在,我們討論了和繼承上下文在內(nèi)的里氏替換原則,指示出的面向?qū)ο蟆? 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語(yǔ)言實(shí)現(xiàn)的第3篇,里氏替換原則LSP(The Liskov Substitution Principle )。英文原文:http://fre...

    susheng 評(píng)論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語(yǔ)言例如來(lái)說(shuō),通過(guò)詞法分析語(yǔ)法分析語(yǔ)法樹(shù),就可以開(kāi)始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫(xiě)在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • 深入理解 js 繼承與原型鏈

    摘要:原型鏈與繼承當(dāng)談到繼承時(shí),只有一種結(jié)構(gòu)對(duì)象。如果對(duì)該圖不怎么理解,不要著急,繼續(xù)往下看基于原型鏈的繼承對(duì)象是動(dòng)態(tài)的屬性包指其自己的屬性。當(dāng)使用操作符來(lái)作用這個(gè)函數(shù)時(shí),它就可以被稱(chēng)為構(gòu)造方法構(gòu)造函數(shù)。 原型鏈與繼承 當(dāng)談到繼承時(shí),JavaScript 只有一種結(jié)構(gòu):對(duì)象。每個(gè)實(shí)例對(duì)象(object )都有一個(gè)私有屬性(稱(chēng)之為proto)指向它的原型對(duì)象(prototype)。該原型對(duì)象也...

    xingqiba 評(píng)論0 收藏0
  • JavaScript深入從原型到原型鏈

    摘要:深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開(kāi)始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...

    Songlcy 評(píng)論0 收藏0
  • JavaScript深入各種繼承

    摘要:通常有這兩種繼承方式接口繼承和實(shí)現(xiàn)繼承。理解繼承的工作是通過(guò)調(diào)用函數(shù)實(shí)現(xiàn)的,所以是寄生,將繼承工作寄托給別人做,自己只是做增強(qiáng)工作。適用基于某個(gè)對(duì)象或某些信息來(lái)創(chuàng)建對(duì)象,而不考慮自定義類(lèi)型和構(gòu)造函數(shù)。 一、繼承的概念 繼承,是面向?qū)ο笳Z(yǔ)言的一個(gè)重要概念。通常有這兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。 《JS高程》里提到:由于函數(shù)沒(méi)有簽名,...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<