1.class創建類
class People{
//构造函数
constructor(name,age,height){
this.name=name
this.age=age
this.height=height
}
run(){
console.log("正在跑")
}
}
// let p1=new People("王一",21,193)
// let p2=new People("王二",22,187)
// console.log(p1)
// console.log(p2)
// console.log(p1.run===p2.run)
//继承一个学生类
class Student extends People{
constructor(name,age,height,score){
//super()方法 父级的构造函数
super(name,age,height)
//super必须写在 自己属性的上方
this.score=score
}
showInfo(){
console.log(this.name)
}
//覆蓋父類的方法
run(){
console.log(this.name+"正在跑")
}
}
let s1=new Student("王一",21,22,65)
console.log(s1 instanceof Student) //true
console.log(s1) //Student {name: '王一', age: 21, height: 22, score: 65}
2.私有屬性
封装性 :私有属性内容 get 和set方法来获取和设置对应属性
class Student{
#uname //定議私有屬性
constructor(name){
this.#uname=name
}
getName(){
return this.#uname
}
}
let s1=new Student("Robert")
console.log(s1) //Student {#uname: 'Robert'}
console.log(s1.#uname) //Uncaught SyntaxError: Private field '#uname' must be declared in an enclosing class
3.静态属性和静态方法
由类来直接调用和获取,不需要 实例化对象来实现(如:数组 push() .length)
Array.from() 将集合转化为数组
let lis=document.getElementsByTagName("li")
// console.log(lis)
lis=Array.from(lis) //类具有的方法 静态方法
//forEach 循环遍历数组
lis.forEach(item=>{
item.οnclick=function(){
console.log(item)
}
})
//static 关键字
//用静态属性 做一个 计数器 来统计 有多少个对象被创建了
class People{
static size=0
constructor(){ //实例化对象的属性
this.age=21
//静态属性 size++
People.size++
}
static show(){
console.log("我是静态方法")
}
}
let p1=new People()
let p2=new People()
let p3=new People()
let p4=new People()
p1.show()//Uncaught TypeError: p1.show is not a function
People.show()//我是静态方法
console.log(People.size)//4