1.代理器,用来拦截或过滤外界对对象的访问 -- 过滤或改写访问
2.声明:
let proxy = new Proxy(target,{ 拦截行为:function(){}, //拦截对应行为的function //拦截对象属性的访问行为 get(target,key){ //target:目标对象 key:访问的属性名 //....code return val; //返回最终的值 }, set(target,key,val){ //....code target[key] = val; } }); //target:目标对象 //{}:拦截的行为
3.拦截行为:一共有13种
4.注意:所有的操作都只能对代理器进行
二、Reflect
1.反射,是一个对象,与Proxy
一一对应,用来对对象执行操作
2.执行操作:一共13种,与Proxy
对应
3.Reflect.ownKeys()
:获取对象的所有属性
三、Iterator
1.遍历器,统一的数据接口,供for...of
使用
2.自带遍历器接口:数组、字符串、Set
、Map
、类似数组的对象(NodeList
,HTML Collection
,arguments
)
3.Symbol.iterator
:属性,是一个函数,默认的iterator
接口就部署在这个属性上
4.自定义iterator
[Symbol.iterator](){ //返回一个遍历器对象 return { //每次遍历都会执行的方法,必须要部署 next(){ //返回当前成员的信息对象 return { //以下值可以二选一,有值,done必须是false,done为true,value就无效 value:val, //成员的值 done:true/false //是否遍历完成 } } //遍历中止时调用的方法,可选 return(){ //code } } }
5.for...of
循环:遍历具备Iterator
接口的数据结构
for(let v of val){}
一、Promise
1.一种异步解决方案,ES6
新增的原生对象
2.三种状态:pending
(进行中),fulfilled
(已成功),rejected
(已失败)
3.两种结果:fulfilled
,rejected
-- 一旦定型,不能更改
4.语法格式:
new Promise((resolve,reject)=>{ //code... if(condition) resolve(data); else reject(error); }).then(function(data){/*promise中对应resolve方法,data就是返回的数据*/},function(err){/*promise中对应的reject方法*/}) .catch(function(err){ //捕获错误 })
5.方法:then()
:当promise
实例得到结果,自动调用then()
中的回调函数,返回一个新的Promise
实例 -- 回调函数:普通函数,作为参数传递给另一个函数或者事件,由另一个函数调用
catch()
:then()
方法中reject
函数的别名 -- 建议使用
finally()
:一定会执行的方法
Promise.all([p1,p2...])
:将多个promise
实例封装成一个新的promise
实例 -- 并列
Promise.race([p1,p2...])
:将多个promise
实例封装成一个新的promise
实例 -- 结果由第一个得到结果的promise
决定
Promise.allSattled([p1,p2...])
:等待所有的实例都得到结果后再执行下一步
Promise.any([p1,p2...])
:将多个promise
实例封装成一个新的promise
实例 -- 或者
二、Generator函数
1.将多种状态返回成遍历器对象 -- 1.状态机 2.遍历器函数
2.语法格式:
function *functionName(){ yield val; //val:一种状态,就是遍历器对象中返回的value,done为false ... return val; //标识结束,done为true }
3.调用:
1.通过next()方法调用 let foo = functionName(); //函数不会执行,生成内部指针 foo.next(); //每执行一次next(),指针就会向下一个yield执行 foo.next(); //{value:val,done:true/false} ... 2.通过for...of遍历 for(let v of functionName()){} 3.自执行模块:co模块
4.注意:1.yield
:yield
表达式的返回值默认为undefined
,可以通过给next()
参数来实现设置上一次yield
返回值
yield
只能用在generator
函数中
2.yield*
:在generator
函数中执行另一个generator
函数
三、Async函数
1.Generator
函数的语法糖
2.与Generator
函数的区别:1.*
去掉,函数之前加上async
关键字,yield
关键字使用await
替代
2.Generator
函数返回的是遍历器对象;Async
函数返回的是Promise
对象
3.Generator
函数必须手动执行;Async
函数和普通函数一样,有内置执行器
3.语法格式:
async function functionName(){ await val; //val可以是任意值,建议为promise,得到promise的结果作为await的返回值,如果是普通值,则直接返回 ... return val; //val作为async函数返回的promise对象的结果 }
4.调用:functionName()