JS類的使用

2021-10-09 03:36:57 字數 4266 閱讀 2935

1.類的基本用法

1.1 不需要跟括號來接收引數,每個物件之間不需要逗號連線

1.2 接收引數要constructor來接收,它會自行呼叫

class

user

getname()

}let zs =

newuser

('張三'

) console.

log(zs.

getname()

)//張三

2.類和普通建構函式的區別

2.1 在類中定義的方法都會自動繫結到該類的原型上去,這樣就不需要手動轉了

2.2 在類中定義的方法是不會被遍歷的,但是屬性可以被遍歷,如果需要將方法遍歷就需要改方法的特徵。

2.3 類是預設在嚴格模式下執行的。

3.靜態屬性

3.1 當需要建立乙個被所有例項物件使用的屬性的,就搞乙個靜態就是把變數給繫結到類上面,而不是繫結到每個例項上,這樣改變一次所有的都會改變。

class

user

}

3.2使用靜態方法來完成計算最**格的操作

let data =[,

,,]class

lessons

name()

price()

static

createprice

(data)

static

maxprice

(data),0

)}}const lessons = lessons.

createprice

(data)

console.

log(lessons.

maxprice

(lessons)[0

].name()

)

4.使用symbol保護屬性

可以讓外部無法訪問屬性,但在內部和子類中可以使用。

const protecteds =

symbol()

class

user

this

[protecteds]

.name = name

}//如果需要外部訪問就要定義乙個訪問器

getname()

}let obj =

newuser

('張三'

) console.

dir(obj)

console.

log(obj.name)

5.私有屬性

在前面加個#就行

只能在內部使用,外部以及子類都不能使用,否則會報錯

class

user

#fun()

}class

admin

extends

user

}let zs =

newuser

('張三'

)

6.class繼承

原理就是用super來代替call,super會呼叫父類

class

user

}class

admain

extends

user

}let zs =

newadmain

('張三'

) console.

log(zs.name)

7.使用super()完成多重繼承

當使用this時this就只能指向乙個物件,這樣當需要當前物件和使用物件時就會發生衝突

而super則能很好得解決這個問題,因為它總是指向父類,一級一級的傳遞

let obj1 =

}let obj2 =

}let obj3 =

} obj3.

show

()

8.super注意事項

8.1 在子類的constructor中一定要呼叫super(),否則父類的建構函式就沒有引數。

8.2 必須在this之前呼叫super(),避免被父類裡面的this覆蓋

9.通過super()呼叫父類方法完成統計資料

class

user,0

)}}class

admin

extends

user

info()

}}let data =[,

,]let zs =

newadmin

(data)

console.

log(zs.

info()

)

10.使用instanceof來判斷是否是某個建構函式的例項

class

user

class

admin

extends

user

let zs =

newadmin()

console.

log(zs instanceof

user

)//true

11.用isprototypeof()來判斷是否被某個物件繼承

class

user

class

admin

extends

user

let zs =

newadmin()

console.

log(user.

isprototypeof

(admin)

)

12.使用類來完成手風琴選單效果

<

!doctype html>

"en"

>

"utf-8"

>

"viewport" content=

"width=device-width, initial-scale=1.0"

>

document<

/title>

* body

.slide

dt .slide dt:first-

of-type

dd .slide dd:last-

of-type

<

/style>

<

/head>

="slide s1"

>

張三<

/dt>

zhangsan.com<

/div>

<

/dd>

李四<

/dt>

lisi.com<

/div>

<

/dd>

王五<

/dt>

wangwu.com<

/div>

<

/dd>

<

/div>

class

animation

hide

(callback)

//為了解決一直點就一直增加高度的bug所以需要放在結束定時器後面,還得有return

this

.height =

this

.height -1}

,this

.timeout)

}show

(callback)

this

.height =

this

.height +1}

,this

.timeout)

}get

height()

setheight

(height)

}class

slide

bind()

)})}

action

(i))}}

class

panel

extends

animation)}

) callback &&

callback()

}static

filter

(items, i)

}let el =

newslide

('.s1'

)<

/script>

<

/body>

<

/html>

js類的繼承

如何實現類的繼承呢?有如下2個建構函式 function peopleclass peopleclass.ptototype function studentclass name,function peopleclass peopleclass.ptototype function studentc...

Js類的寫法

建構函式的優點是 我們可以根據引數來構造不同的物件例項 缺點是每次構造例項物件時都會生成getname方法,造成了記憶體的浪費。用乙個外部函式來代替類方法,達到了每個物件共享同乙個方法 原型方式的缺點就是不能通過引數來構造物件例項 一般每個物件的屬性是不相同的 優點是所有物件例項都共享getname...

JS類的繼承

目錄 js類 寫類 繼承get set static 方法static修飾 屬性static修飾 特殊 var v parent new parent console.log v parent 就以上面的parent類為父類,寫乙個studnet繼承他 class student extends p...