@kitmi/jacaranda
Version:
JavaScript application framework
42 lines (41 loc) • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
class DeferredService {
constructor(serviceFactory){
this.instance = null;
// 创建一个 Proxy 来拦截属性和方法访问
return new Proxy(this, {
get: (target, prop)=>{
// 延迟创建 service 实例
if (!target.instance) {
target.instance = serviceFactory();
}
// 获取实例上的属性或方法
const serviceInstanceProp = target.instance[prop];
// 如果是方法,返回一个绑定到实例的方法
if (typeof serviceInstanceProp === 'function') {
return serviceInstanceProp.bind(target.instance);
}
// 否则返回属性值
return serviceInstanceProp;
},
set: (target, prop, value)=>{
if (!target.instance) {
target.instance = serviceFactory();
}
target.instance[prop] = value;
return true;
}
});
}
}
const _default = DeferredService;
//# sourceMappingURL=DeferredService.js.map