在ES6中构造函数也是不可获缺的一部分那么在ES3.1与ES6中对比,到底是在那些地方进行升级了,请看我一一道来
构造函数基础部分
ES3.1缺点:属性和原型方法分开了,代码可读性差
ES6优点:从逻辑上说更合理,成为一个整体
ES6构造函数规范
1.类的声明不会被提升,和let const 一样,有临时性死区
2.类的所有代码全都是在严格模式中执行
3.类的所有方法都是不可枚举的
4.类的所有方法都无法当成构造函数直接使用
5.类的构造器必须使用new 来调用
对象中类的方法
1.可以写成计算属性名
2.可以使用getter 和 setter×暂未理解×
3.静态成员×暂未理解×
4.字段初始器(es7)
class Test{
a = 1; //简写,初始化的工作,如果没有使用static,就是实例成员
b = 2;
static c = 3
// constructor(){
// this.a = 1;
// this.b = 2
// }
const t = new Test()
console.log(t.a,t.b,t.c,Test.c)//1,2,ubdefined,3
- 类表达式
const A = class{ //匿名类,类表达式,类在js中本身就是表达式
a = 1;
b = 2;
}
const a = new A();
console.log(a)
eg:通过以下的例子很容易看的得出来ES6中将增加实例方法写进构造函数中这样写可以规范代码,符合编码习惯,加快书写效率。
//ES3.1构造函数
function Person(job,name,age,sex){
this.job = job;
this.name = name;
this.age = age;
this.sex = sex;
}
//增加实例方法
Person.prototype.print = function(){
console.log('工作:',this.job)
console.log('姓名:',this.name)
console.log('年龄:',this.age)
console.log('性别:',this.sex)
}
const a = new Person("程序猿","zhansan",30,"nan");
a.print()
//ES6构造函数
class Person{
constructor(job,name,age,sex){
this.job = job;
this.name = name;
this.age = age;
this.sex = sex;
}
print(){
console.log('工作:',this.job)
console.log('姓名:',this.name)
console.log('年龄:',this.age)
console.log('性别:',this.sex)
}
}
const a = new Person("程序猿","zhansan",30,"nan");
console.log(a)
a.print()