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);
  • 相关阅读:
    druid spring监控配置
    深入理解Java:SimpleDateFormat安全的时间格式化
    Thread.join()方法
    static 作用
    Java链接SqlServer,学生数据管理面板
    java巅峰作业
    2019.6.12Java/IO data
    Java常用类
    2019.6.5
    java求和运算窗口5.29
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13569153.html
Copyright © 2011-2022 走看看