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+"考试");
}
}