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...