繼承及ES6繼承

2021-10-06 22:57:06 字數 3309 閱讀 5380

物件導向的三大特點:多型、繼承、封裝

繼承:乙個型別的物件能夠訪問另外乙個型別的屬性和方法

(函式)類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象

原型物件中的this指向例項

function

person()

var person =

newperson()

;//person只是乙個例項

console.

log(person.age)

;<

/script>

call在給fn傳遞引數的時候,是乙個個的傳遞值的,

>

bind這個方法在ie6

~8下不相容-

call改變this和執行fn函式一起都完成了,而bind只改變,並沒有執行。

function

person

(name, age);}

function

male

(name, age)

function

female

(name, age);}

let male =

newmale

("zhangsan",20

);male.

sayhello()

;<

/script>

//原型:原型物件

//每乙個函式都有乙個prototype屬性,我們把這個屬性叫做原型或者原型物件,原型物件裡的屬性和方法能被例項所訪問。

function

person()

person.prototype.name =

"john"

; person.prototype.age =20;

person.prototype.

sayhello

=function()

;/* let person = new person();

console.log(person.__proto__ == person.prototype); -> true */

function

male()

//通過**實現繼承*************

male.prototype =

newperson()

; console.

log(male.prototype.__proto__ === person.prototype)

;// -> true

let male =

newmale()

; console.

log(male.__proto__ === male.prototype)

; male.

sayhello()

;//首先訪問例項屬性和方法

<

/script>

//屬性放到建構函式裡,方法放到原型物件上

function

person

(name, age)

person.prototype.

sayhello

=function()

;function

male

(name, age)

= person.prototype; 指向一樣

for(

let i in person.prototype)

male.prototype.

sayhi

=function()

;var male =

newmale

("sunguikang",20

);male.

sayhello()

; male.

sayhi()

;var person =

newperson

("john",21

);person.

sayhi()

;// 報錯

/* var obj1 = ;

var obj2 = {};

for(var i in obj1)

console.log(obj2); */

<

/script>

function

person

(name, age)

person.prototype.

sayhello

=function()

;function

male

(name, age)

male.prototype = object.

create

(person.prototype)

; male.prototype.constructor = male;

var male =

newmale

("john",20

);male.

sayhello()

;/* var obj1 = ;

var obj2 = ;

obj2 = object.create(obj1);

console.log(obj2.__proto__ == obj1); */

//male prototype constructor

//male __proto__

.constructor === male

//male.__proto__.constructor === male

<

/script>

//語法糖

class

person

//方法

sayhello()

static

foo()}

// extends 繼承

class

male

extends

person

sayhi()

}static

bar()}

let male =

newmale

("john",20

);male.

sayhi()

; male.

bar();

// → 靜態方法,或者類方法

<

/script>

繼承 ES6的繼承語法

什麼是繼承?繼承是發生在父子級關係中的現象 繼承 是 建構函式 的高階應用 就是兩個互為父子級關係的建構函式的應用 子級建構函式,繼承的是父級建構函式的屬性和方法 常見的繼承操作,分為 es5 的繼承語法 和 es6 的繼承語法 實際專案中一般不會直接使用繼承語法,一般都是通過框架來完成繼承,不用專...

es5繼承與es6繼承

es5中的繼承方式 1.原型鏈繼承 缺點 1.建立例項時無法像父類建構函式傳遞引數 2.因為指定了原型,所以不能實現多繼承 3.父類建構函式上的屬性被所有子類共用,給原型上的屬性賦值會改變其他子類的屬性值 es5 const parent function name,age parent.proto...

ES6 中的繼承

下面的例子是分別使用es5和es6的語法來實現programer類 繼承 person類 1.es5中的繼承實現2.es6中的繼承實現 1.定義個person類 class person 3.獲取名稱的方法 getname 4.定義乙個programer類 並且繼承 person 類 class p...