我正在使用异步服务并从中获取数据。这部分没问题,但是当我尝试设置这个数据然后从对象 - 空值。 请检查下面的代码,为什么getPage()返回false?
var PageName = function() {
this.page = false;
this.getPage = function() {
return this.page;
};
this.setPage = function(pageId) {
this.page = pageId;
console.log(pageId); //Get correct result
};
this.savePage = function(callback) {
chrome.storage.sync.get('pageId', function (obj) {
pageId = obj.pageId;
callback(pageId);
});
};
};
var page = new PageName();
page.savePage(page.setPage);
setInterval(function(){
console.log(page.getPage()); //always get default result - false
}, 4000);
答案 0 :(得分:2)
page.setPage
需要绑定到页面。查看此网站上的第一个示例https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
或者,您也可以根本不使用this
。然后你不需要绑定该函数。
e.g。
var PageName = function() {
var page = false;
function getPage() {
return page;
}
function setPage(pageId) {
page = pageId;
}
function savePage(callback) {
chrome.storage.sync.get('pageId', function (obj) {
setPage(obj.pageId);
callback(obj.pageId);
});
}
return {
getPage: getPage,
setPage: setPage,
savePage: savePage
};
}
var page = PageName();
page.savePage(function(pageId) {
console.log("pageId = " + pageId);
console.log("page.getPage() = " + page.getPage());
});
在这个例子中,我也删除了setInterval
的使用,因为我觉得它没有多大意义。
顺便说一句。这里有一些关于javascript对象创建模式的重复文章。
http://www.samselikoff.com/blog/some-Javascript-constructor-patterns
http://www.codeproject.com/Articles/687093/Understanding-JavaScript-Object-Creation-Patterns