通過class關(guān)鍵字可以定義類,可以實現(xiàn)單例模式,訪問器屬性,靜態(tài)方法,extends繼承
- 普通寫法
function Person(name, age) {
//屬性
this.name = name
this.age = age
}
//方法
Person.prototype.show = function () {
console.log(this.name, this.age)
}
let person = new Person('張三', 20)
person.show()
- es6 class寫法
class Person{
//構(gòu)造函數(shù)
constructor(name,age){
this.name=name
this.age=age
}
//方法
show(){
console.log(this.name,this.age)
}
}
let person = new Person('張三', 20)
person.show()
- 也可以用表達式的方式來定義
let Person = class {
constructor(name, age) {
this.name = name
this.age = age
}
}
let person = new Person('張三', 20)
console.log(person.name)
- 單例模式:用的不多
let Person = new class {
constructor(name, age) {
this.name = name
this.age = age
}
}('張三', 20)
console.log(Person.name, Person.age)
- 訪問器屬性(get,set)
class Person {
constructor(name, age) {
this.name = name
this.age = age
this.ageText = ''
}
//set監(jiān)聽屬性值的變化,設(shè)置值
set age(val) {
//console.log(val)
if (val >= 18)
this.ageText = '成人'
else
this.ageText = '未成年'
}
//get獲取值
get age() {
return this.ageText
}
}
let person = new Person('張三', 20)
person.age = 30 //改變值
console.log(person.ageText)
- extend是繼承 super可調(diào)用父類
//父類(基類)
class Person {
constructor(name) {
this.name = name
}
run() {
console.log('人類在跑步')
}
}
//子類(派生類)
class SuperMan extends Person {
constructor(name) {//不寫constructor,默認調(diào)用父類
super(name)//調(diào)用父類Person 的 constructor(name)
}
run() {
super.run()//調(diào)用繼承父類方法
console.log(this.name + '在跑步')
}
}
let s1 = new SuperMan("超人")
console.log(s1.name)
s1.run()//自己沒有的方法會查詢調(diào)用繼承父類,自己有就調(diào)用自己