方法,不设置属性值

时间:2014-05-02 08:56:43

标签: javascript

我有以下代码:

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值不会改变。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是正常结果,并且由于范围变化而发生。我不知道Storage是否有您自己的实现(因为它与getItem而不是get一起使用),但无论如何,您正在调用一种方法,我猜是回调了你提供的函数作为第二个参数,对吧?

因为这个函数是从其他地方调用的,所以this不是你想要的对象。

以下是一个简单示例:http://jsfiddle.net/6c2e6/1/

查看日志,看看this是什么。它是Window,因为我的test函数处于顶层......