zoukankan      html  css  js  c++  java
  • [Javascript] Wrap a Javascript Built-in constructor with Proxy

    Instances of most built-in constructors also use a mechanism that is not intercepted by Proxies. They therefore can’t be wrapped transparently, either. We can see that if we use an instance of Date:

    const proxy = new Proxy(new Date(), {});
    
    assert.throws(
      () => proxy.getFullYear(),
      /^TypeError: this is not a Date object.$/
    );

    The mechanism that is unaffected by Proxies is called internal slots. These slots are property-like storage associated with instances. The specification handles these slots as if they were properties with names in square brackets. 

    As a work-around, we can change how the handler forwards method calls and selectively set this to the target and not the Proxy:

    const handler = {
      get(target, propKey, receiver) {
        if (propKey === 'getFullYear') {
          return target.getFullYear.bind(target);
        }
        return Reflect.get(target, propKey, receiver);
      },
    };
    const proxy = new Proxy(new Date('2030-12-24'), handler);
    assert.equal(proxy.getFullYear(), 2030);
  • 相关阅读:
    django中的FBV和CBV
    RESTful
    REST
    18.前端路由router-08权限控制
    17.前端路由router-07keep-alive
    16.前端路由router-06动态路由
    15.前端路由router-05嵌套路由
    14.前端路由router-04编程式导航
    13.前端路由router-03路由参数
    java基础总结
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13569153.html
Copyright © 2011-2022 走看看