Priv
和 Pub
是我模拟私人和公共的方式;()()
,以便它按照我想要的方式工作。我希望能够输入 Priv.whateverProp
()
时,完成结果会显示 apply, bind, call etc
。getInstance()()
.completions**
才能访问实例属性,但是当我运行程序时,它显示SingletonFinder().getInstance() is not a function
Priv().whaterverProp
而不是 Priv.whateverProp
,这是我不想要的。let Priv = SingletonFinder().getInstance()()
?function GetFinder(){
let Pub = {}
let Priv = SingletonFinder().getInstance()()
// the rest of the code...
}
function SingletonFinder() {
let Priv = {}
let Pub = {}
/** @type {Class_Finder} */
Priv.instance = null;
Priv.createInstance = function () {
return Class_Finder
}
Pub.getInstance = function () {
if(!Priv.instance) {
Priv.instance = Priv.createInstance()
}
return Priv.instance
};
return Pub
}
function Class_Finder() {
// properties
}
多年后,在回顾这个项目后,我可以得出这样的结论:
SingletonFinder().getInstance()()
中需要额外的括号是由于getInstance
的返回值,即Class_Finder
函数;以下代码举例说明了为什么需要 ()()
才能输出“true”:const obj = {};
const fn = ()=>{return true}
obj.method = ()=>{return fn}
console.log(obj.method) //output: function
console.log(obj.method()) //output: function
console.log(obj.method()()) //output: true
最后,一切都是为了好玩!我从来都不是一名职业程序员,只是一个完全的初学者。当时,模式让我着迷,就像尝试编码和浏览在线社区一样。