我有以下代码:
function Show() {
this.showId = $("#meta-show-id").val();
this.title = $("#meta-title").val();
this.season = $("#meta-season").val();
this.episode = $("#meta-episode").val();
this.storageId = $("#meta-show-id").val() + '-' + $("#meta-season").val() + '-' + $("#meta-episode").val();
this.torrents = [];
this.putioId = null;
this.status = null;
this.subtitle = null;
}
Show.prototype = {
constructor: Show,
checkStorage: function() {
var storage = new Storage();
storage.get(this.storageId, function(data){
if (jQuery.isEmptyObject(data)){
console.log("empty");
}
else {
this.subtitle = data.subtitle;
}
});
}
}
当我在checkStorage()
上调用object
方法时,方法会在chrome.storage.sync
中检查数据,并设置object
this.subtitle property
。
但这似乎不起作用,this.subtitle
值不会改变。
我做错了什么?
答案 0 :(得分:0)
这是正常结果,并且由于范围变化而发生。我不知道Storage
是否有您自己的实现(因为它与getItem
而不是get
一起使用),但无论如何,您正在调用一种方法,我猜是回调了你提供的函数作为第二个参数,对吧?
因为这个函数是从其他地方调用的,所以this
不是你想要的对象。
以下是一个简单示例:http://jsfiddle.net/6c2e6/1/
查看日志,看看this
是什么。它是Window,因为我的test
函数处于顶层......