ES6之类:构造函数的语法糖
类的出现,有效地解决了之前构造函数的问题。这是以前的写法:
js
//使用传统构造函数写法
//构造器
function Person(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
}
//原型方法
Person.prototype.sayHello=function(){
console.log(this.name,this.age,this.sex)
}
const p1 = new Person("张三", 18, "男");
console.log(p1)
for (const prop in p1) {
console.log(prop)
}
可以看到,使用构造函数时js并不会区分它是普通函数还是构造函数。
构造函数通常由构造器和原型方法组成。定义在原型上是为了减少内存资源上的浪费。
有这么几个问题:
- 属性和原型方法分离,代码阅读性差
- 枚举属性时会包括原型方法
- 默认情况下,可以直接使用普通函数的方式调用(可以使用 new.target 避免)
下面是类的写法:
js
//使用类的写法
class Person{
//构造器
constructor(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
}
//原型方法
sayHello(){
console.log(this.name,this.age,this.sex)
}
}
const p1 = new Person("张三", 18, "男");
console.log(p1)
for (const prop in p1) {
console.log(prop)
}
使用类时需要使用关键字 class ,使用 constructor 创建构造器,所有的方法会直接加到原型上。所有的成员都统一到了类里。
类的特点:
- 所有成员统一,可读性好
- 枚举时不会枚举原型方法
- 必须使用 new 调用构造器
- 自动使用严格模式
- 原型上的方法无法通过 new 调用
- 类的声明不会被提升,而是放入暂时性死区