ES6类
# 面向对象和面向过程编程
1.面向过程:看步骤
2.面向对象:看对象,封装性,继承性,多态性。
在javascript中,对象是一组无序的相关属性和方法的集合。
类是泛指的一大类,对象是通过类实例化得到的一个具体对象。
# 声明类
1.constructor是构造函数,在new时会自动调用。
2.类里面的方法不需要加function关键字。
3.多个函数和方法之间不需要加逗号。
~~~js
//1.声明类
class Star {
constructor(uname,gae){
this.name = uname;
this.age = age;
}
sing(){
conlose.log('唱歌');
}
}
//2.创建类
var = new Star('刘德华',18);
~~~
# 类的继承
1.采用super可以调用父类的constructor,父类的方法只能从父类的condtructor里面调用方法.
2.就近原则:儿子里面有需要的方法,有则不再去父类里面查找。可以直接通过super.方法名直接调用父类的普通方法。
3.儿子可以在父亲的基础上扩展新的方法。需要通过super调用父类的构造函数。super必须在子类之前调用。
~~~js
class Father {
constructor(uname,uage) {
this.uname = uname;
this.uage = uage;
}
sum(){
console.log(this.uage);
}
}
class Son extends Father {
constructor(uname,uage){
//调用父类的构造函数
super(uname,uage);
this.uname = uname;
this.uage = uage;
}
}
var son = new Son(1,2);
son.sum();
~~~
4.ES6里面类没有没有变量的提升,因此先要有类才能实例化类。类里面的共有属性和方法,必须加this.
5.类里面的this指向,方法里面指向的是方法的调用者,constructor指向实例化对象
# 静态成员
1.实例对象和函数对象的属性和方法不相通,属于类的属性和方法称为静态成员.用static标注。
# get和set使用
```js
class Phone{
get price(){
console.log("价格属性被读取了");
return 'iloveyou';
}
//必须要有参数输入
set price(newVal){
console.log('价格属性被修改了');
}
}
//实例化对象
let s = new Phone();
//获得对应属性,会调用get方法,返回值是return后面的值
//输出的是:价格属性被读取了,iloveyou
console.log(s.price);
//设置属性的值会调用set方法
s.price = 'free';
```