ES6基础语法(Proxy,Reflect,Iterator,Promise,Generator,Async)

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.自带遍历器接口:数组、字符串、SetMap、类似数组的对象(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.yieldyield表达式的返回值默认为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()

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值