亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  行業資訊  > JavaScript全解析——繼承

JavaScript全解析——繼承

來源:千鋒教育
發布人:zyh
時間: 2023-05-25 14:16:00 1684995360

  繼承

  ●要知道什么是繼承

  ●要知道繼承的方式有哪些

  ●每種的繼承方式是如何實現的

JavaScript全解析——繼承

  什么是繼承

  ●繼承關系出現在構造函數和構造函數之間

  ●當構造函數A 的實例使用了 構造函數B 的屬性和方法

  ●我們就說 構造函數A 繼承自 構造函數B

  ○管 構造函數A 叫做子類

  ○管 構造函數B 叫做父類

  ●總結 :繼承就是獲取存在對象已有屬性和方法的一種方式  

function Person(name, age) {
this.name = name
this.age = age
}

Person.prototype.play = function () { console.log('玩游戲') }

// 將來我創建的 Person 的實例, 就會出現兩個屬性一個方法
const p = new Person('Jack', 18)
console.log(p)

function Student(classRoom) {
this.classRoom = classRoom
}

// 將來我創建的 Student 的實例
// 當我的 s 實例能使用 name 屬性, age 屬性 和 play 方法的時候
// 我們就說 Student 構造函數繼承自 Person 構造函數
// Student 就是 子類
// Person 就是 父類
const s = new Student(2114)
console.log(s)

      繼承的方式有哪些

  原型繼承

  ●核心: 讓子類的原型指向父類的實例

  ●優點:

  ○父類構造函數體內的屬性和原型上的方法都可以實現繼承

  ●缺點:

  ○繼承下來的屬性不在自己身上, 在自己的原型上

  ○一個構造函數的實例, 需要在兩個地方傳遞參數

  ○所有子類的實例, name 和 age 一模一樣

<script>
// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.play = function() {
console.log('玩游戲')
}
// 子類
function Student(classRoom) {
this.classRoom = classRoom
}
// 實現繼承
const p = new Person('Jack', 18)
Student.prototype = p
// 此時 s 的 __proto__ 指向誰 ?
// 指向所屬構造函數的 prototype
// 因為 Student.prototype 就是 就是 Person 的實例
// s 的 __proto__ 就是 Person 的實例
const s = new Student(2114)
console.log(s)
// 當你訪問 s 的 classRoom 成員的時候
// 自己有直接使用
console.log(s.classRoom)
// 當你訪問 s 的 name 成員的時候
// 自己沒有, 去到自己的 __proto__ 上查找
// 因為自己的__proto__ 就是 Person 的實例
// 其實就是去到 Person 的實例上查找
console.log(s.name)
// 當你訪問 s 的 play 成員的時候
// 自己沒有, 去到自己的 __proto__ 上查找
// 也就是去到 Person 的實例上查找, 發現還是沒有
// 就再去 __proto__ 上查找
// 自己的 __proto__ 的 __proto__
// Person 實例 的 __proto__
// Person 實例 的 __proto__ 就是 Person.prototype
s.play()
const s2 = new Student(2115)
console.log(s2)
</script>

      借用構造函數繼承

  ●核心: 把父類構造函數當做普通函數調用, 并且改變其 this 指向

  ●優點:

  ○子類的所有繼承下來的屬性都在自己身上

  ○子類的所有參數在一個地方傳遞

  ○子類的所有實例都可以給繼承下來的屬性賦不一樣的值

  ●缺點:

  ○父類的原型上的方法沒有繼承下來 


// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.play = function() {
console.log('玩游戲')
}
// 子類
function Student(classRoom, name, age) {
this.classRoom = classRoom
// 實現繼承
Person.call(this, name, age)
}
const s = new Student(2114, 'Jack', 18)
console.log(s)
const s2 = new Student(2115, 'Rose', 20)
console.log(s2)

      組合繼承

  ●核心: 把原型繼承和借用構造函數繼承放在一起使用

  ●優點:

  ○都能繼承下來

  ○屬性在自己身上, 每一個子類實例繼承的屬性值都可以不一樣

  ●缺點:

  ○子類的原型上多了一套屬性


<script>
// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.play = function() {
console.log('玩游戲')
}
// 子類
function Student(classRoom, name, age) {
this.classRoom = classRoom
// 借用繼承
// 目的: 把屬性繼承在自己身上
Person.call(this, name, age)
}
// 原型繼承
// 目的: 繼承父類原型上的方法
Student.prototype = new Person()
// 創建子類的實例
const s = new Student(2114, 'Rose', 20)
console.log(s)
</script>

      ES6類繼承

  ●類的繼承是ES6中提出的一種繼承方式

  ●這個繼承有了語法的規定,必須要按照這樣的方式來繼承

  ●類的繼承的實現: 兩個步驟實現繼承

  ○書寫子類的時候, 加上 extends 關鍵字

  ■class 子類 extends 父類 {}

  ■目的: 繼承父類原型上的方法

  ○在子類的 constructor 內書寫 super()

  ■super(實參)

  ■目的: 繼承父類的屬性

  ●注意:

  ○必須要書寫 super 和 extends

  ○在子類的 constructor 內 super 必須寫在 this.xxx 的前面(最前面)

  ●父類可以是構造函數,但是子類不能的構造函數因為extends和super關鍵字就是給類設計的


<script>
// 父類
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
play() {
console.log('玩游戲')
}
}
// 父類
// function Person(name, age) {
// this.name = name
// this.age = age
// }
// Person.prototype.play = function () { console.log('玩游戲') }
// 子類
class Student extends Person {
constructor(classRoom, name, age) {
super(name, age)
this.classRoom = classRoom
}
study() {
console.log('學習')
}
}
const s = new Student(2114, 'Jack', 18)
console.log(s)
class Teacher extends Person {
constructor(gender, name, age) {
super(name, age)
this.gender = gender
}
}
const t = new Teacher('男', 'Jack', 20)
console.log(t)
</script>

      拷貝繼承

  ●利用 for in 循環遍歷對象

  ●把所有的內容復制一份放在子類的原型上


// 書寫 for in 循環的時候, 不光可以遍歷到對象自己身上的屬性, 也可以遍歷到原型上的屬性
// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHi = function () { console.log('hello world') }

// 創建一個父類的實例
// const p = new Person('Jack', 18)
// console.log(p)
// for (let k in p) {
// console.log(k)
// }

// 子類
function Student(gender, ...arg) {
this.gender = gender

// 創建一個父類的實例
const p = new Person(...arg)
// 利用 for in 循環繼承
for (let k in p) {
// 隨著循環, k 分別是 name age 和 sayHi
Student.prototype[k] = p[k]
}
}

const s = new Student('男', 'Jack', 18)
console.log(s)
console.log(s.name)
const s2 = new Student('女', 'Rose', 20)
console.log(s2)
console.log(s2.name)

      寄生式繼承

   /*
寄生式繼承1

*/

// 父類
function Person(name) {
this.name = name
}
Person.prototype.sayHi = function () { console.log('hello world') }

// 子類
// 構造函數內不要寫 return
function Student() {
// 直接在子類里面 return 一個父類的實例
const p = new Person('Jack')
return p
}

// 創建一個子類的實例
// 看似得到的是 Student 的實例, 但是其實得到的還是 Person 的實例
const s = new Student()
console.log(s)



/*
寄生式繼承2 - 對寄生式繼承1 的 改造
*/

// 父類
function Person(name) {
this.name = name
}
Person.prototype.sayHi = function () { console.log('hello world') }

// 子類
// 構造函數內不要寫 return
function Student(gender) {
this.gender = gender
}

// 寄生一下 父類的原型
// Student的原型指向 Person的原型
Student.prototype = Person.prototype

// 創建一個子類的實例
// Student 自己沒有原型使用了, 直接使用 Person 的原型
const s = new Student('男')
console.log(s)



// 寄生式組合繼承

// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHi = function () { console.log('hello world') }


// 實現繼承
// 借助一個第三方構造函數
function Third() {}
// 第三方構造函數去繼承 父類
// 利用寄生繼承的方式來實現
// 第三方的 原型 指向 父類的原型
Third.prototype = Person.prototype
// 將來我使用第三方創建實例的時候
const t = new Third()

// 子類
function Student(...arg) {
// 利用 call 繼承
Person.call(this, ...arg)
}
// 子類去想辦法繼承第三方的內容
// 利用原型繼承去繼承第三方內容
// 子類的原型指向第三方的實例
Student.prototype = new Third()
const s = new Student('Jack', 18)
console.log(s)


// 利用了一個自執行函數
// 自執行函數, 不需要名字的函數
;(function () {
var a = 100
console.log('你好 世界')
})()


// 子類
function Student(gender, ...arg) {
this.gender = gender

Person.call(this, ...arg)
}

// 把 第三方內容 放在自執行函數內
(function () {
function Third() {}
Third.prototype = Person.prototype
Student.prototype = new Third()
})()

const s = new Student('男', 'Jack', 18)
console.log(s)


      冒充式繼承  


/*
冒充繼承
+ 利用了一個淺拷貝 + 寄生繼承
*/

// 父類
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHi = function () { console.log('hello world') }

const p = new Person('Jack', 18)

// 寄生繼承
function Student(gender) {
this.gender = gender

// 創建完畢實例以后, 拷貝一個父類的實例
Object.assign(this, p)
}
Student.prototype = Person.prototype

const s = new Student('男')


console.log(s)

 

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
開班信息
北京校區
  • 北京校區
  • 大連校區
  • 廣州校區
  • 成都校區
  • 杭州校區
  • 長沙校區
  • 合肥校區
  • 南京校區
  • 上海校區
  • 深圳校區
  • 武漢校區
  • 鄭州校區
  • 西安校區
  • 青島校區
  • 重慶校區
  • 太原校區
  • 沈陽校區
  • 南昌校區
  • 哈爾濱校區
国产盗摄XXXX视频XXXX| 97免费公开在线视频| 日韩欧无码一二三区免费不卡| 久久69老妇伦国产熟女高清| 祖母和おばあちゃん的区别| 少妇BBW搡BBBB搡| 人妻少妇HEYZO无码专区| 日韩精品视频一区二区| 西西顶级艺术WWW日本超大胆| 亚洲精品亚洲人成在线| 7777色情XXXX欧美| 国产SUV精品一区二区五| 精品国产AⅤ一区二区三区| 免费 黄 色 人成 视频 在| 日本一卡二卡四卡无卡国产 | 18禁美女裸身无遮挡免费网站| 成 人 网 站国产免费观看| 国产无遮挡裸露视频免费| 美女脱个精光扒开尿口图片无遮挡 | 鲁鲁夜夜天天综合视频| 日韩一区二区视频在线| 亚洲AV自慰白浆喷水少妇 | 丰满妇女强高潮18ⅩXXX| 国偷自产视频一区二区久| 亚洲国产婷婷六月丁香| 女人张开腿让男人添| 色五月丁香五月综合五月亚洲| 亚洲AV无码丰满尖叫高潮| …久久精品99久久香蕉国产 | 欧美大成色WWW永久网站婷| 天堂中文资源库官网| 野花影视大全在线西瓜在线播放 | 人人爽人人澡人人人妻、百度| 无码中文国产不卡视频| √最新版天堂资源网在线| 国产精品久久国产精品99盘| 鲁一鲁一鲁一鲁一曰综合网| 少妇粉嫩小泬白浆流出| 亚洲线精品一区二区三八戒| 成人免费看WWW网址入口| 久久99精品久久久久久野外| 日韩一区二区三区视频| 夜夜高潮夜夜爽夜夜爱爱一区| 低调看JRS直播| 久久天天躁夜夜躁狠狠躁2022| 色在线 | 国产| 在床上拔萝卜视频高清免费看 | 国产极品美女高潮无套在线观看| 久久水蜜桃网国产无线网欧美日韩| 色欲色香天天天综合网WWW| 一区二区精品视频日本| 国产高潮流白浆喷水在线观看| 麻豆国产97在线 | 欧洲| 无码精品、日韩专区| 99精品国产一区二区三区| 好爽好大再深点高H免费观看| 欧洲精品成人免费视频在线| 亚洲精品乱码久久久久久按摩 | 色欲AV综合久久一区二区三区| 一起碰一起噜一起| 国产亲子伦ⅩⅩⅩⅩX熟妇视频| 欧式春画图片大全欣赏简单| 亚洲无人区码二码三码区别| 国产放荡对白视频在线观看| 欧美精品国产综合久久| 亚洲色AV性色在线观无码| 国产精品VIDEOSSEX久久发布| 欧美性猛交XXXX乱大交3| 亚洲性色AV一区二区三区| 国产免费无遮挡吸乳视频在线观看| 琪琪网三级伦锂电影| 永久免费的啪啪免费网址| 国产又色又刺激高潮视频 | 日本XXXXXXXXX69| 亚洲最大的成人网站| 国产日产欧产精品精品首页| 日本熟妇人妻ⅩXXXXOO多毛| 在线国内永久免费CRM| 好儿子妈妈今天就是你的女人| 色老99久久精品偷偷鲁| 综合成人亚洲偷自拍色| 特级毛片在线大全免费播放| 真人新婚之夜破苞第一次视频| 国内综合精品午夜久久资源| 色综合久久综合中文综合网| JAVA强行VIDEOS另类| 快拨出天我是你母亲| 亚洲国产精品久久艾草| 国产丶欧美丶日本不卡视频| 日韩AV毛片无码免费| 18国产精品白浆在线观看免费| 精品无人区一区二区三区在线| 午夜成人无码福利免费视频| 国产AⅤ无码专区亚洲AV麻豆| 人妻少妇久久中文字幕一区二区| 16—17女人毛片毛片| 久久久久精品国产四虎1 | 国产日产欧产美韩系列国| 双乳被一左一右吃着的感觉| 不卡无码人妻一区三区| 欧美熟妇精品一区二区三区| 中文字字幕乱码视频高清| 久久丫免费无码一区二区| 亚洲欧美日韩国产综合V| 国产亚洲成AⅤ人片在线观看麻豆| 天天做天天忝天天噜| 国产99久久久国产精品~~牛 | 西西顶级艺术WWW日本超大胆| 国产GAYSEXCHINA男| 少妇爆乳无码AV无码专区| 成人欧美一区二区三区1314| 锕锕锕锕锕锕锕好疼免费视频 | 欧美熟妇呻吟猛交XX性| 中文字幕人妻被公上司喝醉| 久久人妻少妇嫩草AV无码专区| 亚洲色大成网站WWW尤物| 精品综合久久久久久98| 亚洲男人第一无码AV网| 精品无码国产污污污免费| 亚洲精品四区麻豆文化传媒| 日日狠狠久久偷偷色综合免费 | 内射口爆少妇麻豆| 47147大但人文艺术| 内射人妻无码色AB麻豆| 91久人人做人人妻人人玩精品| 男女爽爽无遮挡免费视频| 18禁高潮出水呻吟娇喘蜜芽| 免费无码高潮喷水AⅤ片在线| ◇一本大道香蕉中文在线| 欧美乱大交XXXXX潮喷| YYYY1111少妇影院在线观| 日本丰满熟妇多毛| 粉嫩粉嫩的18在线免免费观看| 私人影院无在线码免费| 国产精品香蕉在线观看网 | 一本之道加勒比在线观看| 久久午夜伦鲁片免费无码| 中文字幕丰满乱子伦无码专区 | 99久久久无码国产精品免费| 欧洲精品码一区二区三区免费看| 白嫩美女被内射59| 少妇人妻系列无码专区视频| 国产精品99久久精品| 亚洲VA国产VA天堂VA久久| 久久AV无码AV高潮AV| 在线精品动漫一区二区无码| 欧美亚洲国产精品久久高清| 粗大挺进亲女H晓晓| 无码AV波多野结衣久久| 狠狠综合久久久久尤物丿 | 久久久久久久久久精品电影 | 亚洲AV无码一区二区二三区3p| 交换配乱吟粗大SNS840| 中国大陆女RAPPER欢迎你| 欧美性猛尖ⅩⅩⅩⅩ乱大交| 丰满爆乳在线播放| 亚洲AV午夜成人影院老师机影院| 久久久久亚洲AV无码尤物| AAA少妇高潮大片免费看| 色噜噜AV亚洲色一区二区| 国产强伦姧在线看无码| 亚洲综合欧美色五月俺也去| 女人脱精光让人桶爽了| 丁香花在线观看免费高清版| 午夜毛片精彩毛片| 久久久久久精品精品免费| Chinese老妇性饥渴老熟女| 视频在线观看一区二区| 黑人vs日本人ⅩXXXHD| 中国OLDWOMAN老熟妇| 人妻无码熟妇乱又伦精品| 国产美女极度色诱视频WWW| 亚洲综合AV一区二区三区| 清一区二区国产好的精华液 | АⅤ天堂中文在线网| 五月丁香综合缴情六月小说| 久久久久亚洲AV无码六十路老熟 | 亚洲自国产拍揄拍| 全部孕妇毛片丰满孕妇孕交| 国产乱人伦偷精品视频不卡| 一本色道无码道在线观看| 人人人澡人人人妻人人人精品| 国产同性GV男男在线观看| 岳妇伦丰满69ⅩⅩ| 色情ⅩXXX欧美色妇HD| 精东传媒VS天美传媒电影| CF穿越火线女去衣看奶| 午夜精品射精入后重之免费观看| 久久亚洲私人国产精品| 吃瓜网51CG7爆料| 天堂А√8在线最新版在线| 国产午夜无码片在线观看影院| 伊人久久大香线蕉AV网禁呦| 日本无码SM凌虐强制M字开腿| 国语自产偷拍精品视频| 99久久免费精品高清特色大片 | 蜜臀AV午夜一区二区三区 | 天堂中文资源在线最新版下载| 久久久久夜色精品国产| 大战丰满无码人妻50P免费|