在 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`);
}
}
});