为什么我的单身人士不工作?
Why my singleton wont work?
我是 JS 的初学者,试图了解单例是如何工作的,在阅读了很多单例模式之后,我得出结论,以下单例模式可以工作,
var singletonIns = (function() {
var instance;
function init() {
var _pvtVar = 123;
var pubVar = 111;
var logPvt = function() {
console.log(_pvtVar);
};
return {
pubVar : pubVar,
logPvt : logPvt
};
}
return {
getInstance : function() {
if (!instance) {
instance = init();
} else {
return instance;
}
}
};
})();
它不会在运行时间抛出任何错误。
然而,当我运行这段代码var abc = singletonIns.getInstance()
它returnsundefined
,我们无法访问abc.pubVar
,为什么那?
请像我五岁一样解释一下。
提前致谢。
if (!instance) {
instance = init();
...然后呢?那你什么都不return。之后加上return instance;
就可以了
您 return 实例启动时,但如果不是,您只需分配它而不是 return。
var singletonIns = (function() {
var instance;
function init() {
var _pvtVar = 123;
var pubVar = 111;
var logPvt = function() {
console.log(_pvtVar);
};
return {
pubVar : pubVar,
logPvt : logPvt
};
}
return {
getInstance : function() {
if (typeof instance == 'undefined') {
instance = init();
return instance;
console.log(instance);
} else {
return instance;
}
}
};
})();
console.log(singletonIns.getInstance());
我是 JS 的初学者,试图了解单例是如何工作的,在阅读了很多单例模式之后,我得出结论,以下单例模式可以工作,
var singletonIns = (function() {
var instance;
function init() {
var _pvtVar = 123;
var pubVar = 111;
var logPvt = function() {
console.log(_pvtVar);
};
return {
pubVar : pubVar,
logPvt : logPvt
};
}
return {
getInstance : function() {
if (!instance) {
instance = init();
} else {
return instance;
}
}
};
})();
它不会在运行时间抛出任何错误。
然而,当我运行这段代码var abc = singletonIns.getInstance()
它returnsundefined
,我们无法访问abc.pubVar
,为什么那?
请像我五岁一样解释一下。
提前致谢。
if (!instance) {
instance = init();
...然后呢?那你什么都不return。之后加上return instance;
就可以了
您 return 实例启动时,但如果不是,您只需分配它而不是 return。
var singletonIns = (function() {
var instance;
function init() {
var _pvtVar = 123;
var pubVar = 111;
var logPvt = function() {
console.log(_pvtVar);
};
return {
pubVar : pubVar,
logPvt : logPvt
};
}
return {
getInstance : function() {
if (typeof instance == 'undefined') {
instance = init();
return instance;
console.log(instance);
} else {
return instance;
}
}
};
})();
console.log(singletonIns.getInstance());