ES6学习笔记2

Proxy(代理器用来拦截某些操作)

要使Proxy起作用必须对Proxy实例进行操作

let proxy=new Proxy(target,handle);//target拦截的目标对象,handle拦截行为
proxy.a="b"

常见的拦截行为对象方法:

  1. get(target,proerty,proxy);参数为目标对象、属性名和 proxy 实例本身
let pro=new Proxy({},{
  get:function(target,property,proxy){
    retrun "test";
  }
})
let obj=Object.create(pro);//obj对象的原型是pro对象
obj.a// "test"
  1. set(target,prop,value,proxy);拦截属性的赋值操作;依次为目标对象、属性名、属性值和 Proxy 实例本身
let pro=new Proxy({},{
  set:function(target,prop,value){
    if(value<200){return value}
    else{ throw("error")}
  }
});
pro.a=200;//报错
  1. apply();拦截函数的调用、call和apply操作;
    接受三个参数,分别是目标对象、目标对象的上下文对象(this)和目标对象的参数数组。
let pro=new Proxy(function(){return "yoyoyo"},{
apply:function(target,ctx,args){
  return "this test"
}});
pro();//this test
  1. has(target,key);判断对象是否具有某个属性时的拦截,参数:目标对象、需查询的属性名;
let pro=new Proxy({"a":1,"b":2},{
  has:function(target,key){
    if(key==="a"){return false}
    return key in target
  }
})
"a" in pro//false
  1. construct(target,args)用于拦截new命令,必须返回一个对象;
    还有deleteProperty(),defineProperty等;

Reflect对象:可以拿到Object底层的方法命令,成其函数操作行为;

'assign' in Object;
Reflect.has(Object,'assign');

其静态方法:Reflect对象的方法与Proxy对象的方法一一对应;

Promise对象:异步编程解决方案,其对象存了未来事件的结果;

Promise 新建后就会立即执行

let p=new Promise(function(resolve,reject){
//...oper code
if(1){
resolved("value")
}
else{
rejected("value")
}
});

p.then(function(){console.log("resolved")}).catch(function(){console.log('error')})

实例方法:finally()不管promise对象最后状态如何都会执行,then(),catch();
静态方法:Promise.all()用于将多个promise对象合成一个新的promise;

const p=Promise.all([p1,p2,p3]).then(...)

Promise.race()也是将多个合成一个,不同的是总的promise对象状态是由第一个发生状态变化的相关;
Promise.resolve() , Promise.reject() 将现有对象转为 Promise 对象

Generator函数 ——异步编程解决方案

Generator是一个状态机,生成遍历器对象的函数;
Generator的特征是:

function * gt({
  yield "test"  //yield用于产出不同状态
  yield "yoyo"
  return "ssss"
})
let G=gt();//遍历器对象;

遍历器对象上调用next(),来指向下一个状态,yield表达式提供了暂停函数执行的标志且只能在Generator函数里面执行
yield表达式本身没有返回值,可以给next()带参数来挡住上一个yield表达式的返回值

function* gt(){
  for(let i=0;true;i++){
    let flag=yield i;
    if(flag){ i=-1; }
  }
}
let g=gt();
g.next();gt.next(true);

实例方法:return()返回给定的值结束Generator函数
es6中异步编程的方法:

  • 回调函数,- promise , - Generator, - 发布/订阅,- 事件监听
async函数----Generator函数的语法糖

async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await
async函数优势:

  • 无需调用next(),内置执行器
  • async函数返回值是promise;

你可能感兴趣的:(ES6学习笔记2)