gpt4 book ai didi

javascript - Singleton 中的公共(public)函数调用自身

转载 作者:行者123 更新时间:2023-11-28 15:52:02 24 4
gpt4 key购买 nike

我正在尝试使用单例模式,但在实现递归公共(public)函数时遇到问题。

var singleton = (function(){
var self = this;
function privateFunc(){
console.log('I can only be accessed from within!');
}
return{
publicFunc: function(){
//More stuff here
setTimeout(self.publicFunc, 1000);
}
}
})();

我用singleton.publicFunc调用它

我收到此错误未捕获类型错误:无法调用未定义的方法“publicFunc”

我的理解是 var self 实际上是这个实例中的 Window 对象,所以我必须传递 singleton.publicFunc 作为回调才能使其工作,但它并没有看起来不太“干”(不要重复自己)。有没有使用单例时更好的方法来完成此任务?

通过 API 调用

var wikiAPI = (function(){
var self = this;
return {
getRandomArticle : function() {
return $.getJSON("http://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exintro=&format=json&callback=?", function (data) {
});
},
fireAPICalls : function() {
self.getRandomArticle().done(function(data) {
for(var id in data.query.pages) {
this.data = data.query.pages[id];
}
console.log(this.data);
setTimeout(self.fireAPICalls, 1000);
});
}
}
})();

最佳答案

您可以使用 named function expression像这样:

var singleton = (function(){
var self = this;
function privateFunc(){
console.log('I can only be accessed from within!');
}
return{
publicFunc: function nameVisibleOnlyInsideThisFunction(){
//^-------------------------------^
//More stuff here
setTimeout(nameVisibleOnlyInsideThisFunction, 1000);
}
}
})();
<小时/>

我刚刚看到你的编辑。有用的是对您尝试调用的函数的引用。那么像这样的事情怎么样:

var wikiAPI = (function(){
var self = this;
var randomArticle = function() {
return $.getJSON("http://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exintro=&format=json&callback=?", function (data) {
});
};
var repeatFunc = function fireApi() {
randomArticle().done(function(data) {
for(var id in data.query.pages) {
this.data = data.query.pages[id];
}
console.log(this.data);
setTimeout(fireApi, 1000);
});
};
return {
getRandomArticle : randomArticle,
fireAPICalls : repeatFunc
}
})();

关于javascript - Singleton 中的公共(public)函数调用自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20192017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com