ES5和ES6中的类定义区别

ES6中的类只是语法糖,它并没有改变类实现的本质。

举个例子,在ES5中定义一个类:

function Person(name, age) {
 
    this.name = name;
    this.age=age;
}
 
Person.prototype.sayHello = function(){
 
    return 'Hi, I am ' + this.name;
}

var xiaoming = new Person("xiaoming",24);

xiaoming.sayHello();
/*这是es5中 主流创建对象的方法之一,方法写在原型链中*/

而用ES6的写法重写一下,检测类型发现Person本质上仍然是函数:

class Person{

     //先创建构造函数
    constructor(name){

        this.name = name;
        
        this.sex=sex;

        this.age=age;

        this.id=id;
    }

    //ES6中的对象的方法不需要单独写在原型链中
    sayHello(){
        return 'Hi, I am' + this.name;
    }
     //ES6中多了静态方法的声明与使用,静态方法是实例对象无法调用的,是通过原型.方法名进行调用,静态方法 多数用于存储 公共方法,比如说要给 这一批 同类对象 进行排序等

    static paixu(){

        console.log(this);

    }
}


}

typeof Person; //'function'


let ren1=new Person("小王","男",18,"10010");

//输出一下该对象

console.log(ren1);

//调用ren1对象的say方法

ren1.say();

//调用原型中的排序方法,该方法在此处并没有实际作用

Person.paixu();

用ES6定义class中的方法,定义在原型对象上的。与ES5不同的是,这些定义在原型对象的方法是不可枚举的。

ES6类和模块是严格模式下的;不存在变量提升,保证子类父类的顺序;类的继承也有新的写法:

class Female extends Person {
    //这里需要注意  构造函数的继承  需要 这样写

    // constructor (参数){

    super(基类参数);

    ***************

}

    constructor(name,sex,age,id,sid){

    super(name,sex,age,id);

    this.sid=sid;

}

 
    sayHello(){
        return super.sayHello() + ', I am ' + this.sex;
    }
    kaoshi(){

        console.log(this.name+"考试");
    }
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值