美文网首页
ES6复习(Proxy Promise)

ES6复习(Proxy Promise)

作者: AriaHuo | 来源:发表于2019-10-12 10:03 被阅读0次

    1.Proxy

    1.Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”

    2.Proxy 支持的拦截操作一览

    get(target, propKey, receiver):拦截对象属性的读取,比如proxy.foo和proxy['foo']。方法用于拦截某个属性的读取操作,可以接受三个参数,依次为目标对象、属性名和 proxy 实例本身(严格地说,是操作行为所针对的对象),其中最后一个参数可选

    set(target, propKey, value, receiver):拦截对象属性的设置,比如proxy.foo = v或proxy['foo'] = v,返回一个布尔值。可以接受四个参数,依次为目标对象、属性名、属性值和 Proxy 实例本身,其中最后一个参数可选

    has(target, propKey):拦截propKey in proxy的操作,返回一个布尔值。

    deleteProperty(target, propKey):拦截delete proxy[propKey]的操作,返回一个布尔值。

    ownKeys(target):拦截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for...in循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而Object.keys()的返回结果仅包括目标对象自身的可遍历属性。

    getOwnPropertyDescriptor(target, propKey):拦截Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象。

    defineProperty(target, propKey, propDesc):拦截Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值。

    preventExtensions(target):拦截Object.preventExtensions(proxy),返回一个布尔值。

    getPrototypeOf(target):拦截Object.getPrototypeOf(proxy),返回一个对象。

    isExtensible(target):拦截Object.isExtensible(proxy),返回一个布尔值。

    setPrototypeOf(target, proto):拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。

    apply(target, object, args):拦截 Proxy 实例作为函数调用的操作,比如proxy(...args)、proxy.call(object, ...args)、proxy.apply(...)。可以接受三个参数,分别是目标对象、目标对象的上下文对象(this)和目标对象的参数数组

    construct(target, args):拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(...args)。

    2.Promise

    1.Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大

    2.Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去

    3.Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数

    function timeout (ms) {

    return newPromise( (resolve,reject)=>{

    setTimeout (resolve,ms,'done');});}

    timeout(100).then((value)=>{

    console.log(value);});

    相关文章

      网友评论

          本文标题:ES6复习(Proxy Promise)

          本文链接:https://www.haomeiwen.com/subject/lkwfmctx.html