在 JavaScript 中使用 Proxy 实现懒初始化

最近写了个库 promisify-wxmp-util 用来将微信小程序中 callback 形式的方法转换成 Promise 形式。功能实现起来很简单,分别对各个方法调用 promisify 即可。但是实践开发中并不一定会用到所有的 API,所以希望它具有懒初始化的功能,在我调用到对应的 API 时才会做 promisify 处理。

使用 Proxy 可以通过 get handler 控制对象属性的访问:

const lib = new Proxy({}, {
  get(obj, prop) {
    if (Reflect.has(obj, prop)) {
      return Reflect.get(obj, prop);
    } else if (typeof wx[prop] !== 'undefined') {
      const func = promisify(wx[prop]);
      obj[prop] = func;
      return func;
    } else {
      return new Error(`Cannot read property '${prop}' of wx`);
    }
  }
});