在此之前,ECMAscript 当中都是通过定义函数以及函数的原型对象来去实现的类。
function Person (name) { // 类型的构造函数
/**
* 在构造函数中,可以通过 this 访问当前的实例对象
*/
this.name = name
}
// 如果需要在这个类型,所有的实例之间共享一些成员可以借助函数对象的 prototype 也就是原型去实现
Person.prototype.say = function () {
console.log(`hi, my name is ${this.name}`)
}
自从 ES2015 开始就可以使用 class 关键词来声明一个类,相比较之前使用函数的方式要更容易理解,结构也会更加清晰。这种语法与一些老牌面向对象语言当中 class 非常类似的,如果说我们想在构造函数当中做一些额外的逻辑,可以添加 constructor 方法,这个方法就是当前这个类的构造函数,同样可以在这个构造函数中使用 this 访问当前的实例对象。如果想为这个类定义实例方法,只需要在这个类里面去添加对应的方法成员。
class Person {
constructor (name) {
this.name = name
}
say () {
console.log(`hi, my name is ${this.name}`)
}
}
两者都是通过 new 关键词创建实例,然后去调用这个实例里面所提供的方法。
const p = new Person('leo');
p.say();