我正在制作一个 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/