Class类的基本语法
ES6的class可以看做是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰,更加面向对象编程的语法。
ps:ES5的生成方法
function Point(a, s) {
this.a =a;
this.s=s;
}
Point.prototype.toString = function() {
return '('+this.a+','+this.s+')';
}
var p = new Point(1,2)
ps:ES6的方法
class Point {
constructor(a,s){
this.a = a;
this.s = s;
}
toString(){
return '('+this.a+','+this.s+')';
}
}
从代码中可以看到除了function变成了class以外,其他的跟ES5基本一样;
在类中声明方法的时候,方法前不加 function 关键字;
方法之间不要用逗号分隔,否则会报错;
一个类中只能拥有一个 constructor 方法;
class 的实例化必须通过 new 关键字。
使用 extends 创建子类
extends 关键字在类声明或类表达式中用于创建一个类作为另一个类的一个子类;
使用extends关键字实现类之间的继承。这比在ES5中使用继承要方便很多;
使用继承的方式,子类就拥有了父类的方法;
//定义类父类
class Parent {
constructor(name,age){
this.name = name;
this.age = age;
}
speakSometing(){
console.log("kdhaufdhakshfsfsd");
}
}
//定义子类,继承父类
class Child extends Parent {
coding(){
console.log("kdhaufdhakshfsfsdt");
}
}
var c = new Child();
//可以调用父类的方法
c.speakSometing(); // I can speek chinese
模板
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
每一个模块内声明的变量都是局部变量,不会污染全局作用域。
模块中可以导入和导出各种类型的变量,如函数,对象,字符串,数字,布尔值,类等。
模块代码自动运行在严格模式下,并且没有任何办法退出严格模式;
在模块顶层作用域创建的变量,不会被自动添加到共享的全局作用域,他们只会在模块的顶层作用域内部存在;
模块的顶层作用域this值为undefined;
对于需要让模块外部访问的内容,模块必须导出他们;
允许模块从其他模块导入绑定;