我们先来看一个例子
class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ')'; } } let p = new Point(1,2); p.x; //1 p.y; //2 p.toString(); //(1, 2)this关键字代表实例对象
constructor为构造方法, 通过 new 命令生成实例时自动被调用, 没有显式定义时一个空的 constructor 会被默认添加, constructor 方法默认返回实例对象(即this)
定义类方法不需要关键字function
方法之间不需要逗号分隔,加了会报错
类的所有方法都定义在类的prototype属性上面
class Point { constructor() { // ... } toString() { // ... } toValue() { // ... } } // 等同于 Point.prototype = { constructor() {}, toString() {}, toValue() {}, }; prototype 对象的 constructor 属性,直接指向“类”的本身,这与 ES5 的行为是一致的类的内部所有定义的方法,都是不可枚举的 class Foo { constructor() { return Object.create(null); } } Foo() // TypeError: Class constructor Foo cannot be invoked without 'new' class 必须使用 new 调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用 new 也可以执行欢迎star,持续更新ing… ES6总结系列参考自阮一峰《ES6入门教程》