ES6学习笔记(三)
该学习笔记源于B站视频https://www.bilibili.com/video/av47304735?from=search&seid=16810589178466991647
一、promise(重点)
1、为了解决回调顺序不确定性和回调地狱,使用promise机制,调用axios库。
eg:
let username;
const usersPromise=axios.get('https://api.github.com/users');
usersPromise .then(reponse=>{
username=reponse.data[0].login;
return axios.get(`https://api.github.com/users/${username}/repos`);
});
.then(reponse=>{
console.log(reponse.data);
});
.catch(err=>{
console.error(err);
});
2、创建自己的promise
eg:
const p=new Promise((reslove,reject)=>{
reslove('yeah!')
});
p.then(data=>{console.log(data)});
3、遇到多个promise时使用promise.all()方法,还可以使用promise. race()方法(由第一个promise决定)。
二、symbol
1、symbol防止属性重名,对象属性名是symbol类型的话,是不能遍历的,也就是说用for in循环是不能获取属性名的,只能通过Object.getOwnPropertySymbols()获取。
三、ESLint
1、ESLint最初是由Nicholas C. Zakas 于2013年6月创建的开源项目。它的目标是提供一个插件化的javascript代码检测工具。
2、ESLint插件地址https://github.com/dustinspecker/awesome-eslint
同时在ESLint配置文件中配置,就可以更有效的使用。
四、ES6模块
1、NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
a、允许用户从NPM服务器下载别人编写的第三方包到本地使用。
b、允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
c、允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
2、import和export
a、默认导出,export default导出,主要是用于整个模块比较主要的东西,可以import任意名字命名。
b、命名导出,export 导出的变量名,主要用于其他地方可能用到的比较琐碎、零散的东西,import必须用导出的变量名。
3、使用SystemJS可以打包JS模块,可以引入第三方模块和本地模块,缺点:网速不好的话会有点慢,适合测试和写一些小东西。
五、babel
1、作用:将ES6代码转换成ES5代码,使得代码可以在浏览器上跑起来.
2、使用polyfill把ES6的特性完善到浏览器中。
六、原型继承
1、如果把共用方法都写在构造函数里的话,每次新生成实例的时候都会执行这段代码,会占用内存,所以使用原型对象,在console控制板可以在__prota__看到。
eg:
User.prototype.info=function(){
console.log(`Hi,I'm ${this.name}`);
}
七、类
1、类的定义和函数定义相似,类就是一种特殊的函数,函数存在函数提升,但是类不行,类的定义中不用逗号。
2、静态方法,只能在类上面调用,而不能在实例上调用。
eg:
class User{
constructor(name,email){
this.name=name;
this.email=email;
}
static description(){
console.log(`I'm a user`);
}
set github(value){
this.githubName=value;
}
get github(){
return `https://github.com/${this.githubName}`;
}
}
3、只能通过new关键字来调用类。
4、ES6中用super()方法在子类的构造函数当中来调用父类的构造函数,如果在子类上定义的方法和基类上同名的话,会调用子类的方法。
class Dog extends Animal{}
5、类可以用来扩展内建对象。
八、遍历器Iterator
1、Iterator.next()方法会返回相应元素的值,遍历完所有元素后,value=undefined,done=true;
a、数组
colors.entries() //或者colors.keys()、colors.values()
const iterator=colors.entries()
iterator.next()
colors.values()
Array.prototype.values=function{
let i=0;
let items=this;
return{
next(){
const done=i>=items.length;
const value=done?undefined:items[i++];
return{
value,
done
}
}
}
}