在面向对象中类有:属性,方法
1.ES5创建类
1.创建类:
function Person(name,age){
this.name=name;
this.age=age;
}
2.为类添加方法:
Person.Prototype.showName=function(){
return `名字为${this.name}`
}
3.创建一个实例,使用类
let p1 =new Person('son',18)
2.Es6中class创建类
class Person{ //1.创建类
constructor(name,age){ //2.添加属性
this.name=name;
this.age=age;
}
showAge(){ //3.添加方法
return '名字为${this.name}
}
}
let p1=Person('son’,13);
2.class里取值函数getter,存值setter 没有get就取不出来
class Person{
constructot(){
}
get add(name){return name;}
set add(name){};
}
let p1=new Person();
pl.aa`='123';//// setter: 123
p1.aa;//getter123
console.lof(p1.aa); 如果没有get就取不出来值,取出的为undifine;
3.静态方法 (类身上的方法)
与普通方式的区别就是
静态方法直接调用,不用实例化对象再调用
class Person{
static add(){
return 'sss';
}
Person.add();
4.Es6里面this矫正3中方法
fn.call(this指向,arg1,arg2)
fn.apply(this指向,[arg1,arg])
fn.bind(this)
5.继承
1.Es5中的继承
父类:
function Person(name){
this.name=name;
}
Person.prototype.showNam=function(){
return this.name;
}
子类:
function son(name.age){
Person.call(this.name);//继承属性,并且用call来矫正方法
this.age=age;
}
student.prototype=new Person();//继承方法
2.Es6中的继承 父类:
class Person{
constructor(name){
this.name=name;
}
showAge(){return aaa;}
子类:
class Student extends Person{//继承父类
constructor(name,age){
super(name);// // 调用父类的constructor(),把父类属性初始化到子类实例中
this.age=age;
}
showAge(){
supe.showAge();//父级方法调用(当名字重用了时)
}