摘要:創(chuàng)建對(duì)象字面量對(duì)象構(gòu)造函數(shù)字面量字面量構(gòu)造函數(shù)繼承原型鏈繼承在睡覺(jué)正在吃就是把實(shí)例賦值給,也就是說(shuō)。構(gòu)造函數(shù)繼承在睡覺(jué)正在吃構(gòu)造函數(shù)繼承可以通過(guò)或方法實(shí)現(xiàn)繼承。
1.創(chuàng)建對(duì)象
1.字面量對(duì)象
2.構(gòu)造函數(shù)
3.Object.create
//1.字面量 var obj={ name: "字面量", show: function(){ console.log(this.name) } } //2.構(gòu)造函數(shù) function fun (name) { this.name=name } var obj=new fun("obj") //3.Object.create var obj={name: "obj"} var obj=Object.create(obj)2.JavaScript繼承 1.原型鏈繼承
function Parent(name){ this.name=name this.sleep=function(){ console.log(this.name + "在睡覺(jué)") } } Parent.prototype.eat=function(food){ console.log(this.name + "正在吃" + food) } function Child(){} Child.prototype=new Parent("Child") Child.prototype.constructor=Child var child=new Child()
Child.prototype=new Parent("Child")就是把Parent實(shí)例賦值給Child.prototype,也就是說(shuō)new Child().__proto__===new Parent("Child")。
可以通過(guò)Child.prototype在原型對(duì)象上增加新的屬性或方法,也可以通過(guò),child.__proto__在原型對(duì)象上添加新的方法和屬性。
缺點(diǎn):
1.原型對(duì)象上的屬性和方法是所有實(shí)例都可訪問(wèn)的,而且一個(gè)實(shí)例改變了原型上的方法和屬性都會(huì)影響到其他實(shí)例。
2.創(chuàng)建子類(lèi)實(shí)例時(shí),無(wú)法向父類(lèi)構(gòu)造函數(shù)傳參。
function Parent(name){ this.name=name this.sleep=function(){ console.log(this.name + "在睡覺(jué)") } } Parent.prototype.eat=function(food){ console.log(this.name + "正在吃" + food) } function Child(){ Parent.call(this,"child") } Child.prototype.eyes=function(){console.log("eyes")} var child=new Child()
構(gòu)造函數(shù)繼承可以通過(guò)call或apply方法實(shí)現(xiàn)繼承。這種方法不能繼承原型對(duì)象中的屬性和方法,只能繼承實(shí)例屬性和實(shí)例方法,但是可以向父類(lèi)傳參。
3.組合繼承function Parent(name){ this.name=name this.sleep=function(){ console.log(this.name + "正在睡覺(jué)") } } Parent.prototype.eat=function(food){ console.log(this.name + "正在吃" + food) } function Child(){ Parent.call(this,"child") } Child.prototype.eyes=function(){console.log("eyes")} Child.prototype=new Parent() Child.prototype.constructor=Child var child=new Child()
組合繼承是比較好的繼承, 他是原型鏈繼承和構(gòu)造函數(shù)繼承的結(jié)合, 合理的利用了這兩種組合的特點(diǎn),既是子類(lèi)的實(shí)例,也是父類(lèi)的實(shí)例, 但有一個(gè)缺點(diǎn)就是調(diào)用了兩次構(gòu)造函數(shù)。
4.組合繼承優(yōu)化function Parent(name){ this.name=name this.sleep=function(){ console.log(this.name + "正在睡覺(jué)") } } Parent.prototype.eat=function(food){ console.log(this.name + "正在吃" + food) } function Child(){ Parent.call(this,"child") } Child.prototype = Object.create(Parent.prototype) Child.prototype.constructor=Child var child=new Child()5.寄生組合繼承
function Parent(name){ this.name=name this.sleep=function(){ console.log(this.name + "正在睡覺(jué)") } } Parent.prototype.eat=function(food){ console.log(this.name + "正在吃" + food) } function Child(){ Parent.call(this,"child") } function f(){} f.prototype=Parent.prototype Child.prototype=new f() Child.prototype.constructor=Child var child=new Child()
只調(diào)用一次父類(lèi)的構(gòu)造函數(shù),避免了在子類(lèi)原型上創(chuàng)建不必要的,多余的屬性。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97297.html
摘要:中繼承比較復(fù)雜,坑比較多,最近有點(diǎn)時(shí)間整理下,記錄下來(lái)。的繼承實(shí)現(xiàn)方式大概分類(lèi)如下的兩大類(lèi),每一種實(shí)現(xiàn)都有自己的有點(diǎn)和缺點(diǎn),根據(jù)場(chǎng)景選擇吧通過(guò)修改原型鏈來(lái)來(lái)實(shí)現(xiàn)繼承通過(guò)復(fù)制父類(lèi)來(lái)來(lái)實(shí)現(xiàn)繼承為了理解繼承的原型鏈的變化,我畫(huà)了原型鏈圖。 JS 中繼承比較復(fù)雜,坑比較多,最近有點(diǎn)時(shí)間整理下,記錄下來(lái)。 JS 的繼承實(shí)現(xiàn)方式大概分類(lèi)如下的兩大類(lèi),每一種實(shí)現(xiàn)都有自己的有點(diǎn)和缺點(diǎn),根據(jù)場(chǎng)景選擇吧 ...
摘要:犯渾的地方中的原型繼承幾乎是面試必問(wèn)點(diǎn),然而真正透徹的理解它還是需要費(fèi)一番功夫的,等等看到腦子就昏掉了,有時(shí)候以為自己掌握了,但是沒(méi)過(guò)多久看到角度不同的講解時(shí)就又犯糊涂了犯渾點(diǎn)中的構(gòu)造函數(shù),實(shí)例與原型之間的關(guān)系。 在javascirpt中,每個(gè)對(duì)象都有一個(gè)指向它的原型對(duì)象的內(nèi)部鏈接,這個(gè)原型對(duì)象又有自己的原型,一級(jí)一級(jí)鏈接上去,直到某個(gè)對(duì)象的原型為null,從而實(shí)現(xiàn)了繼承。 犯渾的地方...
摘要:缺點(diǎn)方法都在構(gòu)造函數(shù)中定義,每次創(chuàng)建實(shí)例都會(huì)創(chuàng)建一遍方法組合繼承組合繼承融合原型鏈繼承和構(gòu)造函數(shù)的優(yōu)點(diǎn),是中最常用的繼承模式然而組合繼承也有一個(gè)缺點(diǎn),就是會(huì)調(diào)用兩次父構(gòu)造函數(shù)。 1.前言 本文完整代碼指路我的GitHub,歡迎star。js中的繼承方式有很多種,以下僅列出部分。 2.原型鏈繼承 代碼如下: function Parent() { this.name = jche...
摘要:基于原型的繼承誠(chéng)惶誠(chéng)恐的寫(xiě)下這篇文章。無(wú)論是還是,都是面向?qū)ο蟮?。將這個(gè)新對(duì)象作為構(gòu)造函數(shù)的執(zhí)行上下文其指向這個(gè)對(duì)象,并執(zhí)行構(gòu)造函數(shù)返回這個(gè)對(duì)象原型繼承我們來(lái)定義一個(gè)簡(jiǎn)單的類(lèi)和它的原型我們?cè)谠蜕隙x了一個(gè)方法。 源碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScr...
摘要:當(dāng)調(diào)用的構(gòu)造函數(shù)時(shí),在函數(shù)內(nèi)部又會(huì)調(diào)用的構(gòu)造函數(shù),又在新對(duì)象上創(chuàng)建了實(shí)例屬性和,于是這兩個(gè)屬性就屏蔽了原型中的同名屬性。 前言:這次對(duì)上篇收個(gè)尾,主要總結(jié)一下javascript的繼承。 1.原型鏈 js中原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。基本思想是:利用原型讓一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方法。我們來(lái)簡(jiǎn)單回顧一下以前的內(nèi)容: 每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象 每個(gè)原型對(duì)象都包含一個(gè)指...
閱讀 2805·2021-11-17 09:33
閱讀 2185·2021-09-03 10:40
閱讀 548·2019-08-29 18:45
閱讀 2969·2019-08-29 16:21
閱讀 622·2019-08-29 11:11
閱讀 3406·2019-08-26 12:00
閱讀 2959·2019-08-23 18:19
閱讀 1101·2019-08-23 12:18