ES5是没有类这个东西,虽然可以写出看起来像类的代码
1 | function Cat (name, color) { |
到了ES6,有了比较正经的写法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class Cat {
constructor(name, color) {
this.name = name
this.color = color
}
say() {
console.log('say', this.name)
}
eat() {
console.log('eat')
}
}
// 使用
let BlackCat = new Cat('Lily','black')
BlackCat.say()
// => say lily
因为有了构造函数 constructor
看起来就比较像传统类
类里的所有方法,包括构造函数,都是定义在原型链 prototype
上
类里定义的方法,用 Object.keys(Cat)
是无法枚举的,直接返回空数组,这点有区别于 Cat.prototype.say
而且无法使用 hasOwnProperty()
来判断实例有没某个方法
1 | BlackCat.hasOwnProperty('say') |
虽然可以从原型链判断方法,但是依旧并无法枚举原型链上的方法
1 | Object.keys(BlackCat) |
同个类的实例化对象,共享同个原型对象
1 | let BlackCat = new Cat('Lily','black') |
类的方法名支持表达式,比如
1 | const funName = 'jump' |
此外也支持Generator方法
1 | class Cat { |
(Generator使用见这篇 异步回调之generator(1)入门篇)
1 |
|