ES6新语法
- 箭头操作符
书写函数变得简单,解决了函数中this指向的问题 - class类的引入,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法
function Point(x, y) {
this.x = x;
this.y = y;}
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';};
var p = new Point(1, 2);
等同于下面
//定义类class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}}
- 增强了对象的字面量
可以在对象字面量里面定义原型,定义方法可以不用function关键字
直接调用父类方法
//通过对象字面量创建对象
var human = {
breathe() {
console.log('breathing...');
}
};
var worker = {
__proto__: human, //设置此对象的原型为human,相当于继承human
company: 'freelancer',
work() {
console.log('working...');
}
};
human.breathe();//输出 ‘breathing...’
//调用继承来的breathe方法
worker.breathe();//输出 ‘breathing...’
- 模板字符串`` 使用${变量}
- 解构
let user={ name:”zs”, age:18 ,gender:”男”}
let {name:username,age,gender}=user
可用在外面直接打印age gender,而 name被重命名了,需要打印username - 默认参数值 对象中不用定义
name =name
直接写name
- 拓展参数
它允许传递数组或者类数组直接做为函数的参数而不用通过apply。 - let const 关键字
可以把let看成var,只是它定义的变量被限定在了特定范围内才能使用,而离开这个范围则无效。const则很直观,用来定义常量,即无法被更改值的变量。
let解决的变量提升的问题 - for of 遍历数组
....
三点运算符,功能是把数组或类数组对象展开成一系列用逗号隔开的值arr=[1 , 2 , 3]
//...arr 即表示 1,2,3
与reset运算符相反 也是…
用法:
function fn(...data){console.log(data)}
fn(1,2,3)
//[1, 2, 3]
- Promises
①. 解决了回调地狱(回调中套回调)
②. Promise 是一个构造函数
在Promise上,有两个函数,分别叫做resolve(成功之后的回调函数)和reject(失败之后的回调函数)
③. 在Promise构造函数的Prototype属性上,有一个 .then()方法,也就是说,只要是Promise构造函数创建的实例,都可以访问到.then()方法
④. Promise表示一个异步操作,每当我们new一个Promise实例,这个实例就表示一个具体的异步操作//创建promise
var promise = new Promise(function(resolve, reject) {
// 进行一些异步或耗时操作
if ( /*如果成功 */ ) {
resolve("Stuff worked!");
} else {
reject(Error("It broke"));
}
});
//绑定处理程序
promise.then(function(result) {
//promise成功的话会执行这里
console.log(result); // "Stuff worked!"
}, function(err) {
//promise失败会执行这里
console.log(err); // Error: "It broke"
}).catch(function(err){
如果不返回错误的回调,可以使用catch捕获错误的信息
})
```