JavaScript OOP 和 Chrome 扩展 api 中的异步方法

标签 javascript google-chrome oop asynchronous google-chrome-extension

我正在制作一个 Chrome 扩展,它使用小文本 block 。 我创建了一个类,每个 block 都是该类的一个实例。这样:

function Block(bid){
    var block = Object.create(Block.prototype);
    block.title = "Default"
    block.content = "";
    block.bid = bid;
    return block;
};

Block.prototype.setTitle = function (){
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
        this.title = tabs[0].title;
    });
};

我的问题是,当我在 Block 对象上调用 setTitle() 时,该方法不会更改 title 属性;它保持在“默认”状态。我知道这与同步和异步方法有关,但我完全无法解决这个问题。

如有任何帮助,我们将不胜感激!

最佳答案

为了避免进一步讨论,我的假设是这是一个范围界定问题。您可以尝试使用以下代码吗:

function Block(bid){
    var block = Object.create(Block.prototype);
    block.title = "Default"
    block.content = "";
    block.bid = bid;
    return block;
};

Block.prototype.setTitle = function (){

    var callback = function(tabs) {
        this.title = tabs[0].title;
    }

    chrome.tabs.query({currentWindow: true, active: true}, callback.bind(this));
};

关于JavaScript OOP 和 Chrome 扩展 api 中的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30532689/

相关文章:

javascript - 是否有可能在*不*捆绑浏览器的情况下构建独立的 HTML5 应用程序?

c# - 使用Createmany动态设置类型

c++ - C++基类在编译时未定义

php - 将用户存储为对象是否有意义?

javascript - AngularJS 和浏览器

javascript - jquery 删除动态添加的元素

javascript - Angular 隔离范围和属性

architecture - Google Chrome 如何将选项卡隔离到单独的进程中,同时看起来像单个应用程序?

javascript - 是否可以在 JavaScript 代码执行的每个 console.log 语句上暂停 chrome 调试器?

javascript - 为 QScriptEngine 重新定义 "Undefined Value"函数时返回 "print()"有什么意义?