阅读阮一峰老师的ES6入门的学习笔记。
Class 基本语法
基本概念
class
关键字,可以看做语法糖。大部分功能ES5通过构造函数生成新对象都可以完成。class
写法让对象原型的写法更清晰。
|
|
|
|
与ES5构造函数比较
定义
class Point
等价于function Point
constructor
是构造方法,等价于ES5中构造函数内定义的内容this
与ES5一样,代表实例对象定义“类”的方法不需要加上
function
关键字,直接写函数名以及函数体。与ES5在构造函数的 原型对象 上(Point.prototype
)上定义方法“类”的方法之间不需要逗号分隔
可以使用
Object.assign
方法,一次向类添加多个方法12345678910class Point {constructor(){// ...}}Object.assign(Point.prototype, {toString(){},toValue(){}});
使用
与ES5构造函数一样,通过
new
命令创造实例对象与ES5 不同 类内部定义的方法是不可枚举的 (non-enumerable)
类的构造函数,不使用
new
无法调用。ES5中构造函数可以不通过new
调用ES6 不存在变量提升所以需要先声明父类再使用
“类”的属性名,可以采用表达式
12345678910let methodName = "getArea";class Square{constructor(length) {// ...}[methodName]() {// ...}}
属性
- 与构造函数相同
typeof
为function
Point.prototype.constructor
也为自身
constructor
- 类的默认方法,通过
new
生成对象实例时自动调用。 - 没有定义时,会默认添加空的
constructor
方法 - 默认返回对象实例(
this
)也可以返回别的对象 - 类的构造函数,不使用
new
无法调用。
类的实例对象
- 与ES5相同,实例的属性除非显示的定义在
this
上,否则都是定义在原型上class
上 - 与ES5相同,类的所有实例共享同一个原型对象
Class表达式
和函数一样可以使用表达式形式定义
12345const MyClass = class Me {getClassName() {return Me.name;}}- 类的名字是
MyClass
Me
只能在Class内部可用Me
和函数名一样,可以省略
- 类的名字是