用类来简化构造函数创建对象的过程
js类就是函数
ES6 class
// class 声明类
class Demo1{
// 公共成员
username='朱老师';
// 构造方法,实例初始化
constructor(name,email){
// 自由属性
this.name=name;
this.email=email;
}
// 共享成员:原型成员
getInfo(){
return`${this.name}:(${this.email})`;
}
// 静态成员
static status='enabled';
}
// 公共成员和静态成员都有(;)但构造方法和共享成员后面不能有
const obj1=new Demo1('朱老师','zhu@php.cn');
console.log(obj1.getInfo());
// 访问静态成员
console.log(Demo1.status);
继承
// 继承(extends)
class Demo2 extends Demo1{
// 构造器
// sex为当前子类的扩展自定义属性
constructor(name,email,sex){
super(name,email);
this.sex=sex;
}
// 子类对父类的方法进行扩展
getInfo(){
return `${super.getInfo()},${this.sex}`;
}
}
const obj2=new Demo2('欧阳','oy@php.cn','男');
console.log(obj2.getInfo());
访问器属性
// 访问器属性
class Demo3{
age=30;
get age(){
return this.age;
}
set age(value){
this.age=age;
}
}
// 实例化
const obj3=new Demo3();
console.log(obj3.age);
解构赋值
const user=['朱老师','zhu@php.cn'];
let username=user[0];
let useremail=user[1];
console.log(username,useremail);
数组解构
// 数组解构
// 模板=值(数组)
let [username,useremail]=['朱老师','zhu@php.cn']
console.log(username,useremail);
// 更新
[username,useremail]=['苟老师','gou@php.cn']
console.log(username,useremail);
// 参数不足,默认值
[username,useremail,age=30]=['苟老师','gou@php.cn']
console.log(username,useremail,age);
// 参数过多,...rest
[a,b,c,...arr]=[1,2,3,4,5,6,7,8,9]
console.log(a,b,c);
console.log(arr);
对象解构
// 对象结构
let {id,lesson,score}={id:1,lesson:'js',score:88};
console.log(id,lesson,score);
// 更新(用一对大括号把整个表达式包装起来)
({id,lesson,score}={id:2,lesson:'php',score:98});
console.log(id,lesson,score);
// 左模板中的变量存在命名冲突就给冲突的变量起个别名
let {id:itemId,num,price}={id:123,num:10,price:888};
console.log(itemId,num,price);