国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  行業(yè)資訊  > JavaScript全解析——繼承

            JavaScript全解析——繼承

            來(lái)源:千鋒教育
            發(fā)布人:zyh
            時(shí)間: 2023-05-25 14:16:00 1684995360

              繼承

              ●要知道什么是繼承

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

              ●每種的繼承方式是如何實(shí)現(xiàn)的

            JavaScript全解析——繼承

              什么是繼承

              ●繼承關(guān)系出現(xiàn)在構(gòu)造函數(shù)和構(gòu)造函數(shù)之間

              ●當(dāng)構(gòu)造函數(shù)A 的實(shí)例使用了 構(gòu)造函數(shù)B 的屬性和方法

              ●我們就說(shuō) 構(gòu)造函數(shù)A 繼承自 構(gòu)造函數(shù)B

              ○管 構(gòu)造函數(shù)A 叫做子類

              ○管 構(gòu)造函數(shù)B 叫做父類

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

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

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

            // 將來(lái)我創(chuàng)建的 Person 的實(shí)例, 就會(huì)出現(xiàn)兩個(gè)屬性一個(gè)方法
            const p = new Person('Jack', 18)
            console.log(p)

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

            // 將來(lái)我創(chuàng)建的 Student 的實(shí)例
            // 當(dāng)我的 s 實(shí)例能使用 name 屬性, age 屬性 和 play 方法的時(shí)候
            // 我們就說(shuō) Student 構(gòu)造函數(shù)繼承自 Person 構(gòu)造函數(shù)
            // Student 就是 子類
            // Person 就是 父類
            const s = new Student(2114)
            console.log(s)

                  繼承的方式有哪些

              原型繼承

              ●核心: 讓子類的原型指向父類的實(shí)例

              ●優(yōu)點(diǎn):

              ○父類構(gòu)造函數(shù)體內(nèi)的屬性和原型上的方法都可以實(shí)現(xiàn)繼承

              ●缺點(diǎn):

              ○繼承下來(lái)的屬性不在自己身上, 在自己的原型上

              ○一個(gè)構(gòu)造函數(shù)的實(shí)例, 需要在兩個(gè)地方傳遞參數(shù)

              ○所有子類的實(shí)例, 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
            }
            // 實(shí)現(xiàn)繼承
            const p = new Person('Jack', 18)
            Student.prototype = p
            // 此時(shí) s 的 __proto__ 指向誰(shuí) ?
            // 指向所屬構(gòu)造函數(shù)的 prototype
            // 因?yàn)?Student.prototype 就是 就是 Person 的實(shí)例
            // s 的 __proto__ 就是 Person 的實(shí)例
            const s = new Student(2114)
            console.log(s)
            // 當(dāng)你訪問(wèn) s 的 classRoom 成員的時(shí)候
            // 自己有直接使用
            console.log(s.classRoom)
            // 當(dāng)你訪問(wèn) s 的 name 成員的時(shí)候
            // 自己沒(méi)有, 去到自己的 __proto__ 上查找
            // 因?yàn)樽约旱腳_proto__ 就是 Person 的實(shí)例
            // 其實(shí)就是去到 Person 的實(shí)例上查找
            console.log(s.name)
            // 當(dāng)你訪問(wèn) s 的 play 成員的時(shí)候
            // 自己沒(méi)有, 去到自己的 __proto__ 上查找
            // 也就是去到 Person 的實(shí)例上查找, 發(fā)現(xiàn)還是沒(méi)有
            // 就再去 __proto__ 上查找
            // 自己的 __proto__ 的 __proto__
            // Person 實(shí)例 的 __proto__
            // Person 實(shí)例 的 __proto__ 就是 Person.prototype
            s.play()
            const s2 = new Student(2115)
            console.log(s2)
            </script>

                  借用構(gòu)造函數(shù)繼承

              ●核心: 把父類構(gòu)造函數(shù)當(dāng)做普通函數(shù)調(diào)用, 并且改變其 this 指向

              ●優(yōu)點(diǎn):

              ○子類的所有繼承下來(lái)的屬性都在自己身上

              ○子類的所有參數(shù)在一個(gè)地方傳遞

              ○子類的所有實(shí)例都可以給繼承下來(lái)的屬性賦不一樣的值

              ●缺點(diǎn):

              ○父類的原型上的方法沒(méi)有繼承下來(lái) 


            // 父類
            function Person(name, age) {
            this.name = name
            this.age = age
            }
            Person.prototype.play = function() {
            console.log('玩游戲')
            }
            // 子類
            function Student(classRoom, name, age) {
            this.classRoom = classRoom
            // 實(shí)現(xiàn)繼承
            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)

                  組合繼承

              ●核心: 把原型繼承和借用構(gòu)造函數(shù)繼承放在一起使用

              ●優(yōu)點(diǎn):

              ○都能繼承下來(lái)

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

              ●缺點(diǎn):

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


            <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()
            // 創(chuàng)建子類的實(shí)例
            const s = new Student(2114, 'Rose', 20)
            console.log(s)
            </script>

                  ES6類繼承

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

              ●這個(gè)繼承有了語(yǔ)法的規(guī)定,必須要按照這樣的方式來(lái)繼承

              ●類的繼承的實(shí)現(xiàn): 兩個(gè)步驟實(shí)現(xiàn)繼承

              ○書(shū)寫(xiě)子類的時(shí)候, 加上 extends 關(guān)鍵字

              ■class 子類 extends 父類 {}

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

              ○在子類的 constructor 內(nèi)書(shū)寫(xiě) super()

              ■super(實(shí)參)

              ■目的: 繼承父類的屬性

              ●注意:

              ○必須要書(shū)寫(xiě) super 和 extends

              ○在子類的 constructor 內(nèi) super 必須寫(xiě)在 this.xxx 的前面(最前面)

              ●父類可以是構(gòu)造函數(shù),但是子類不能的構(gòu)造函數(shù)因?yàn)閑xtends和super關(guān)鍵字就是給類設(shè)計(jì)的


            <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('學(xué)習(xí)')
            }
            }
            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 循環(huán)遍歷對(duì)象

              ●把所有的內(nèi)容復(fù)制一份放在子類的原型上


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

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

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

            // 創(chuàng)建一個(gè)父類的實(shí)例
            const p = new Person(...arg)
            // 利用 for in 循環(huán)繼承
            for (let k in p) {
            // 隨著循環(huán), 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') }

            // 子類
            // 構(gòu)造函數(shù)內(nèi)不要寫(xiě) return
            function Student() {
            // 直接在子類里面 return 一個(gè)父類的實(shí)例
            const p = new Person('Jack')
            return p
            }

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



            /*
            寄生式繼承2 - 對(duì)寄生式繼承1 的 改造
            */

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

            // 子類
            // 構(gòu)造函數(shù)內(nèi)不要寫(xiě) return
            function Student(gender) {
            this.gender = gender
            }

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

            // 創(chuàng)建一個(gè)子類的實(shí)例
            // Student 自己沒(méi)有原型使用了, 直接使用 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') }


            // 實(shí)現(xiàn)繼承
            // 借助一個(gè)第三方構(gòu)造函數(shù)
            function Third() {}
            // 第三方構(gòu)造函數(shù)去繼承 父類
            // 利用寄生繼承的方式來(lái)實(shí)現(xiàn)
            // 第三方的 原型 指向 父類的原型
            Third.prototype = Person.prototype
            // 將來(lái)我使用第三方創(chuàng)建實(shí)例的時(shí)候
            const t = new Third()

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


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


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

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

            // 把 第三方內(nèi)容 放在自執(zhí)行函數(shù)內(nèi)
            (function () {
            function Third() {}
            Third.prototype = Person.prototype
            Student.prototype = new Third()
            })()

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


                  冒充式繼承  


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

            // 父類
            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

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

            const s = new Student('男')


            console.log(s)

             

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            PMP?認(rèn)證榮獲北京市境外職業(yè)資格認(rèn)可!

            北京市人力資源和社會(huì)保障局、北京市人才工作局近日發(fā)布了關(guān)于印發(fā)《北京市境外職業(yè)資格認(rèn)可目錄(3.0版)》的通知,新版目錄境外職業(yè)資格清單...詳情>>

            2023-09-07 17:27:00
            怎么選擇靠譜的短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)?

            怎么選擇靠譜的短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)?5G時(shí)代的來(lái)臨,短視頻作為新媒體中最為主流的內(nèi)容更加方便用戶瀏覽觀看信息,因此抖音、快手這類的短視頻平...詳情>>

            2023-09-07 15:05:06
            全媒體短視頻運(yùn)營(yíng)好就業(yè)么?

            全媒體短視頻運(yùn)營(yíng)好就業(yè)么?現(xiàn)在學(xué)習(xí)互聯(lián)網(wǎng)運(yùn)營(yíng)可不能只會(huì)單個(gè)的運(yùn)營(yíng)技術(shù),企業(yè)更喜歡全能型人才。如今的互聯(lián)網(wǎng)世界有多種平臺(tái),新媒體、短視頻...詳情>>

            2023-09-07 14:49:25
            短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)有用嗎?

            短視頻運(yùn)營(yíng)培訓(xùn)機(jī)構(gòu)有用嗎?短視頻的火熱,催生了一大批的網(wǎng)絡(luò)紅人、網(wǎng)紅賬號(hào),這些短視頻賬號(hào)通過(guò)實(shí)現(xiàn)粉絲流量變現(xiàn),獲得了非常豐厚的收入,自...詳情>>

            2023-09-06 13:49:12
            大數(shù)據(jù)分析就業(yè)高薪崗位介紹

            大數(shù)據(jù)分析就業(yè)高薪崗位介紹?大數(shù)據(jù)行業(yè)是一個(gè)快速發(fā)展的行業(yè),其主要特征是數(shù)據(jù)規(guī)模龐大、種類多樣、處理復(fù)雜。目前,大數(shù)據(jù)行業(yè)已經(jīng)成為全球...詳情>>

            2023-09-06 13:42:47
            開(kāi)班信息
            北京校區(qū)
            • 北京校區(qū)
            • 大連校區(qū)
            • 廣州校區(qū)
            • 成都校區(qū)
            • 杭州校區(qū)
            • 長(zhǎng)沙校區(qū)
            • 合肥校區(qū)
            • 南京校區(qū)
            • 上海校區(qū)
            • 深圳校區(qū)
            • 武漢校區(qū)
            • 鄭州校區(qū)
            • 西安校區(qū)
            • 青島校區(qū)
            • 重慶校區(qū)
            • 太原校區(qū)
            • 沈陽(yáng)校區(qū)
            • 南昌校區(qū)
            • 哈爾濱校區(qū)