Class 的基本语法
通过class关键字,可以定义类
class写法让对象原型的写法更清晰、更像面向对象编程的语法
通过构造函数生成实例对象:
//es5写法: function Point(x,y){ this.x = x; this.y = y; } Point.prototype.toString = function(){ return "("+ this.x + ',' + this.y+")"; }
var p = new Point(x,y)
//es6写法: Class Point{ constructor(x,y){ this.x = x; this.y = y; } toString(){ return '('+ this.x + '```,' + this.y + ')'; } } es6定义一个类,里面有constructor方法,就是构造方法,this关键字代表实例对象。 就是:es5的构造函数Point ,对应es6的Point类的构造方法。
Point类还定义了toString方法, 在类中定义方法是,不需要加“function” 关键字, 方法之间不需要加逗号分隔;
es6中的类,完全可以看作构造函数的另一种写法。
class Point{
...
}
typeof Point // "function"
Point === Point.prototype.constructor // true
这个表明,类的数据类型就是函数,类本身就指向构造函数。
使用时,也是直接使用new命令,跟构造函数的用法一毛一样。
2.严格模式
类和模块的内部,默认都是严格模式
3.constructor方法
1.类中的constructor方法是其默认方法,通过new实例化时,自动调用该方法,若为空,则自动添加空的constructor方法
2.constructor 默认返回实例对象(this),这里可以指定返回其它对象
3.使用new
4.类的实例对象
1.使用new
2.实例的属性,若非直接定义在实例本身,则为全部定义在原型上(es6 中 即为class上)
3.同es5, 类的实例共享同一个原型对象
5.Class表达式
1.可使用表达式形式定义类 (const MyClass = class Me{}); 此时类名为MyClass,Me则只能在Class内部可用
2.立即执行:
let person = new Class{
constructor(name){
this.name = name;
}
sayName (){
alert(this.name)
}
}("summer");
person.sayName();//summer
6.不存在变量提升
不同于es5: 必须要先生命,才能调用或继承
7.私有方法和私有属性
1.