摘要:原型鏈繼承核心代碼核心代碼優(yōu)點(diǎn)簡單容易實現(xiàn)缺點(diǎn)多拷貝了一份的屬性過來并且的方法每生成一個新的就要再重新拷貝一份造成了不必要的浪費(fèi)構(gòu)造函數(shù)繼承優(yōu)點(diǎn)簡單容易實現(xiàn)可以同時繼承多個父對象三姓家奴缺點(diǎn)只能繼承定義在父元素上的屬性或方法而對于父元素原型
//1.原型鏈繼承 var supClass = function(name, sex) { this.name = name || "red" this.sex = sex || "good" this.father = "father" this.say = function() { console.log(this.name) } } supClass.prototype = { sayHi() { console.log(this.name + " hi") } } /*var sonClass = function(name, sex) { this.name = name this.sex = sex } console.log(sonClass.prototype) sonClass.prototype = new supClass() //核心代碼 sonClass.prototype.constructor = sonClass//核心代碼 var son1 = new sonClass("red", "s") son1.say()*/ //優(yōu)點(diǎn): 簡單,容易實現(xiàn) //缺點(diǎn): 多拷貝了一份supClass的屬性過來,并且supClass的方法每生成一個新的 // sonClass就要再重新拷貝一份,造成了不必要的浪費(fèi) //2.構(gòu)造函數(shù)繼承 /*var sonClass = function(name, sex, type) { supClass.call(this) this.type = type this.sex = sex this.name = name } var son1 = new sonClass("jay", "man", "goodman") son1.say()*/ //優(yōu)點(diǎn): 簡單,容易實現(xiàn),可以同時繼承多個父對象(三姓家奴) //缺點(diǎn): 只能繼承定義在父元素上的屬性或方法,而對于父元素原型對象上的屬性或方法 //則無法繼承 //3.混合繼承 /*var sonClass = function(name, sex, type) { supClass.call(this) this.type = type this.sex = sex this.name = name } sonClass.prototype = new supClass() sonClass.prototype.constructor = sonClass var son1 = new sonClass("jay", "man", "goodman") son1.say() son1.sayHi()*/ //優(yōu)點(diǎn): 幾乎完美 //缺點(diǎn): 實現(xiàn)復(fù)雜,使用原型繼承的部分仍然沒有解決會多拷貝一份父類屬性從而造成 //不必要的空間浪費(fèi)的問題(可以在sonClass的prototype中看到被屏蔽的繼承自父類的屬性) //4.寄生組合式繼承 //使用工廠函數(shù)將父元素的原型剝離出來多帶帶賦值給子元素的原型 function birth(f, s) { var prototype = Object(f.prototype) s.prototype = prototype s.prototype.constructor = s } //組合式繼承 /*var sonClass = function(name, sex, type) { supClass.call(this) this.type = type this.sex = sex this.name = name } birth(supClass, sonClass) var son1 = new sonClass("jay", "man", "goodman") son1.say() son1.sayHi()*/ //優(yōu)點(diǎn): 完美 //缺點(diǎn): 實現(xiàn)困難
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101836.html
摘要:實現(xiàn)繼承的方法借用構(gòu)造函數(shù)解決原型中包含引用類型所帶來的問題的過程中,使用借用構(gòu)造函數(shù)偽造對象或經(jīng)典繼承來實現(xiàn)繼承。 繼承 在ECMAScript中繼承主要是依靠原型鏈來實現(xiàn)的。 實現(xiàn)繼承的方法 利用原型讓一個引用類型繼承另一個引用類型的屬性和方法 什么是原型鏈 先要了解構(gòu)造函數(shù)、原型、和實例的關(guān)系: 每一個構(gòu)造函數(shù)都有一個原型對象,原型對象都包含一個指向構(gòu)造函數(shù)的指針,實例都包含...
摘要:組合方式繼承終極版工商建設(shè)開心能分清是孩子還是父輩二狗的構(gòu)造函數(shù)已指向圖示關(guān)鍵代碼創(chuàng)建對象的方法就是用原型鏈來連接的。也讓二狗有了確定的歸屬。 一、繼承原理 原型鏈不知道什么是原型鏈?來讀幾個關(guān)鍵詞: 哥歐 構(gòu) 構(gòu)造函數(shù) 構(gòu)造函數(shù) 構(gòu)造函數(shù) 實例 實例 實例 原型對象 原型對象 原型對象 prototype prototype prototype __proto__ __pro...
摘要:老明調(diào)用了從原型中繼承來的方法繼承到了當(dāng)前對象的原型中調(diào)用了從原型中擴(kuò)展來的方法構(gòu)造繼承基本思想借用構(gòu)造函數(shù)的基本思想就是利用或者把父類中通過指定的屬性和方法復(fù)制借用到子類創(chuàng)建的實例中。 1、原型鏈繼承 核心: 將父類的實例作為子類的原型 缺點(diǎn): 父類新增原型方法/原型屬性,子類都能訪問到,父類一變其它的都變了 function Person (name) { ...
摘要:繼承方式一混入繼承繼承方式二原型繼承創(chuàng)建構(gòu)造函數(shù),并且將對象的地址賦值給構(gòu)造函數(shù)的原型實現(xiàn)繼承恢復(fù)三角關(guān)系實例化的所有對象都擁有對象的屬性和方法繼承方式三混入加原型繼承方式四實現(xiàn)過程了一個新的對象,把傳入作為參數(shù)的那個對象設(shè)置給新創(chuàng)建的這個 繼承方式一:混入繼承 use strict; //object:A let Oa= { money: many money, r...
摘要:參與任何數(shù)值計算的結(jié)構(gòu)都是,而且。。面向人類的理性事物,而不是機(jī)器信號。達(dá)到無刷新效果。的工作原理總是指向一個對象,具體是運(yùn)行時基于函數(shù)的執(zhí)行環(huán)境動態(tài)綁定的,而非函數(shù)被聲明時的環(huán)境。原型對象上有一個屬性,該屬性指向的就是構(gòu)造函數(shù)。 1.JS面向?qū)ο蟮睦斫?面向?qū)ο蟮娜筇攸c(diǎn):繼承、封裝、多態(tài) 1、JS中通過prototype實現(xiàn)原型繼承 2、JS對象可以通過對象冒充,實現(xiàn)多重繼承, 3...
閱讀 3596·2021-09-13 10:28
閱讀 1946·2021-08-10 09:43
閱讀 1018·2019-08-30 15:44
閱讀 3189·2019-08-30 13:14
閱讀 1844·2019-08-29 16:56
閱讀 2947·2019-08-29 16:35
閱讀 2853·2019-08-29 12:58
閱讀 872·2019-08-26 13:46