我正在尝试公开一个模块。我只想向所有调用者公开它的一个实例,并且我想等到调用模块来实例化它。我试图这样做:
var obj = {};
var foobar = function(){
var id=22;
function GetId(){ return ++id; }
return{ GetId: GetId };
};
obj.foobar = (function(){
if (obj.foobar instanceof foobar) {
return obj.foobar;
}
return new foobar();
})();
console.log(obj.foobar.GetId());//23
console.log(obj.foobar.GetId());//24
但实际上它只是一个混淆
obj.foobar = new foobar();
我的意图是在第一次调用obj.foobar = new foobar()
时实例化obj.foobar.GetId()
,第二次obj.foobar.GetId()
调用使用已经实例化的版本。尽管此处不存在,但存在需要等待实例化的依赖项,new foobar();
因此无法立即执行。
我怎么能做到这一点,我错过了什么?