JavaScript'这'window.setInterval中的作用域
JavaScript 'this' scope in window.setInterval
我是Javascript的新手,所以有人能告诉我为什么"this"的值会根据我从哪个函数调用它而变化吗。我不是把addquote
称为一种方法吗(从这里开始的#3?我写这篇文章主要是作为OOP练习,所以如果有人能给我介绍好的文档,我将不胜感激。谢谢!
function QuoteBox(text, author){
this.quote = new Quote(text, author);
this.element = document.getElementById("quotebox");
}
QuoteBox.prototype.removequote = function(c){
// do some animation here and maybe move the removal to a callback
this.element.children[0].innerHTML = "";
this.element.children[1].innerHTML = "";
c();
}
QuoteBox.prototype.addquote = function(){
console.log(this); // outputs the window ?!
this.element.children[0].innerHTML =quote.text;
this.element.children[1].innerHTML =quote.author;
}
QuoteBox.prototype.refresh = function(){
console.log(this); // outputs the quotebox object
this.quote.generate();
this.removequote(this.addquote);
}
$(document).ready(function() {
quotebox = new QuoteBox("Quote", "Author");
window.setInterval(function(){
quotebox.refresh();
}, 5000);
});
当您调用这样的函数时:
this.removequote(this.addquote);
您将对addquote
的引用传递到removequote
中,因此您的c
包含对addquote
方法的引用,而不是上下文。当您调用c()
时,此方法将在全局上下文中调用。可以使用bind将上下文绑定到方法。像这样:
this.removequote(this.addquote.bind(this));
因为您在removequote
函数中调用c()
而没有为此调用指定目标对象。所以,应该是c.call(this)
关于这个话题的好文章-http://unschooled.org/2012/03/understanding-javascript-this/
相关文章:
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- Javascript作用域和Ajax调用;工作不正常
- 带有KendoUI组件的Javascript变量作用域
- TypeScript(JavaScript)中的项作用域
- 作用域问题-此函数是否形成闭包-JavaScript
- switch语句中的Javascript作用域
- JavaScript作用域:如何创建具有不同值的匿名函数
- 访问Javascript对象-Node.js的作用域问题
- Javascript中的内部函数作用域
- 什么's JavaScript数组中项目的作用域
- Javascript变量作用域:从回调函数中提取变量
- 为什么全局变量没有't似乎受到内部作用域(Javascript)的影响
- 对象变量作用域javascript
- Javascript函数作用域[Javascript Essentials]
- 私有作用域Javascript的最好方法
- 可变作用域Javascript模块模式
- 方法中的变量作用域(Javascript)
- 如何将作用域JavaScript作用域分离为多个文件(UbuntuJS作用域)
- 限制共享变量的作用域(Javascript)
- 将函数的参数提取到全局作用域(javaScript)