JS中不同方法如何實現繼承

2021-09-24 13:55:51 字數 2858 閱讀 1053

首先來乙個父類的建構函式

// 父類

function

person

(name, age, ***)

person.prototype.

personlogage

=function()

let person1 =

newperson

('xiao',20

,'male');

console.

log(person1)

;// person

注意:物件a的__proto__屬性指向的是它的建構函式的原型

將父類的例項作為子類的原型

// 父類

function

person

(name, age, gender)

person.prototype.

personlogage

=function()

// 子類

function

personal

(other)

personal.prototype =

newperson

('yuan',17

,'female'

)// 繼承

let personal1 =

newpersonal()

;console.

log(personal1)

;// personal

缺點:

要想為子類新增原型屬性和方法,則必須在new person()之後執行

來自原型物件的所有屬性被所有例項共享

建立子類例項時,無法向父類建構函式傳參

不能實現多繼承

在子類的建構函式的內部呼叫父類建構函式,等於是複製父類的例項屬性給子類

// 父類

function

person

(name, age, gender)

person.prototype.

personlogage

=function()

// 子類

function

personal

(name, age, gender, other)

let personal1 =

newpersonal

('yuan',17

,'female'

,'other'

) console.

log(personal1)

// personal

缺點:

只能繼承父類的例項屬性和方法,不能繼承原型屬性和方法

無法實現函式復用,每個子類都有父類例項函式的副本,影響效能

結合原型鏈接觸和建構函式繼承

// 父類

function

person

(name, age, gender)

person.prototype.

personlogage

=function()

// 子類

function

personal

(name, age, gender, other)

personal.prototype =

newperson()

// 繼承原型屬性和方法

personal.prototype.constructor = personal

let personal1 =

newpersonal

('yuan',17

,'female'

,'other'

)console.

log(personal1)

// personal

缺點:

相信學習react的時候都會看到下面這段**

import react,

from

'react'

class

login

extends

component

render()

}export

default login

這裡看到constructorsuper關鍵字,如果這裡不用super會報錯,從這裡切入,我們聊聊es5和es6實現繼承的區別。

es5繼承:

function

parent

(a, b)

function

child

(c)parent.

call

(child,1,

2)

使用call實現繼承的底層原理其實是

child.prototype =

newparent(1

,2)

由此可見,es5整體繼承的過程是

class

parent

}class

child

extends

parent

}

由此可見,es6整體繼承的過程是

總體來說,es5和es6繼承最大的區別就是

1、es5先建立子類,再例項父類並新增到子類this中

2、es6是先建立父類,再實例子類中通過關鍵字super訪問父類,通過修改this實現繼承

js動態建立li的不同方法

一 document.body.innerhtml 我們可以 用document.body.innerhtml 方法向body內新增li元素,但迴圈新增太耗效能,可以先迴圈將要新增的字串預先連線後儲存到str裡,再一次性新增給body document.body.innerhtml str,這樣可以...

JS建立物件幾種不同方法詳解

每個方法都有在每個例項上重新建立一遍。person1和person2都有乙個sayname 的方法,但兩個方法不是同乙個function例項。不同例項上的同名函式是不相等的。建立兩個完成同樣任務的function例項沒有必要,而且還有this物件在,不需要在執行 前就把函式繫結在特定物件上,可以像下...

php中不同方法中同名方法的處理

近日檢視codeigniter原始碼,發現其helper類可以自定義方法,從而對系統helper方法進行擴充套件或重寫。ci herper類介紹 對於類可以繼承實現方法的重寫或擴充套件,對於方法可以嗎?於是做了一下嘗試 建立兩個引用檔案,裡面有乙個同名方法。include1.php function...