首先來乙個父類的建構函式
// 父類
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
這裡看到constructor
和super
關鍵字,如果這裡不用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...