js 高级(代理和期约)

判断类型时除了用type of 还可以用instanceof

persion instanceof Object

for in 用于枚举对象中的非符号键属性,forin不能保证返回的对象

for of 用于遍历可迭代对象的元素

break 和continue 区别:break用于立即退出当前循环,强制执行循环后的下一条语句

continue 也用于立即退出循环


代理

定义:代理是目标对象的抽象,类似与c语言的指针,既可以用作目标对象的替身,又可以独立于目标对象。目标对象既可以直接被操作,也可以通过代理来操作,但直接操作会绕过代理施予的行为

const target={
     foo:'bar'
  }
   const hanaler={
     get:()=>{
       return 'intercepted'
    }
  }
   const proxy=new Proxy(target,hanaler)
   console.log(proxy.foo)
   console.log(target.foo)

使用代理的主要目的是可以定义捕获器(即上文的get())。捕获器是定义中的“基本操作拦截器”

捕获器参数可以接收三个对象分别为目标对象,要查询属性和代理对象

const target={
     foo:'bar'
  }
   const hanaler={
     get:(tarpTarget,property,receiver)=>{
       console.log(tarpTarget===target)//true
       console.log(property)
       console.log(receiver===proxy)//true
    }
  }
   const proxy=new Proxy(target,hanaler)
   console.log(proxy.foo)

可撤销代理:有时候需要中断代理对象与目标对象的联系

 const target={
    foo:'bar'
  }
  const hanaler={
    get:(tarpTarget,property,receiver)=>{
      console.log(tarpTarget===target)//true
      console.log(property)
      console.log(receiver===proxy)//true
    }
  }
   
   
  const {proxy,revoke}=Proxy.revocable(target,hanaler)
  console.log(proxy.foo)
  console.log(target.foo)
  revoke()
  console.log(proxy.foo)  

Promise

基础

let p =new Promise(()=>{})
  setTimeout(console.log,0,p)

期约状态机:

1、待定(pengding)

2、兑现(fulfilled ,有时候也称为“解决”,resolved)

3、拒绝(rejected)

通过执行函数控制期约状态

let p1=new Promise((resolve,reject)=>resolve())
setTimeout(console.log,2000,p1)
let p2=new Promise((resolve,reject)=>reject())
setTimeout(console.log,4000,p2)
 
posted @ 2023-03-07 23:13  guorunbin  阅读(14)  评论(0编辑  收藏  举报