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)