使用'this'对象构造函数中的变量
using the 'this' variable within object constructor
我对在对象构造函数中调用'this'变量时得到的结果有点困惑。
function Slider(tag){
this.tag = document.querySelector(tag),
this.start = function(){
return this.interval;
},
this.interval = setInterval(function(){
console.log(this.tag); //undefined
console.log(this); //window object
}, 2000)
}
var route ={
init:function(){
mySlide = new Slider('slider');
mySlide.start();
}
}
document.addEventListener('DOMContentLoaded', route.init);
我正在记录标签console.log(this.tag)
,但它返回undefined
,当记录this
变量在console.log(this)
它指的是窗口对象。
Here is a Demo
问题:为什么console.log(this.tag)
不返回选定的元素?
这是因为当您将回调函数传递给setInterval
时,它在全局作用域中被调用。这就是为什么this
是window
。
您可以使用Function.bind()
将函数的上下文设置为您的this
对象,并使其按您的意愿工作。
this.interval = setInterval(function(){
console.log(this.tag);
}.bind(this), 2000);
另外,我只是想指出mySlide.start();
什么也不做。当调用new Slider('slider')
时,就是设置间隔的时候。您的mySlide.start();
只返回intervalID(仅用于clearInterval()
)。实际上,由于您甚至没有使用mySlide.start();
的返回值,调用它是无用的。
更新:另一个解决方案是在构造函数中使用var self = this;
,然后在setInterval()
中使用self
:
function Slider(tag){
var self = this;
this.tag = document.querySelector(tag),
this.interval = setInterval(function(){
console.log(self.tag);
}, 2000);
}
更新:如果你的浏览器支持"箭头功能",那么你可以这样做:
this.interval = setInterval(() => {
console.log(this.tag);
}, 2000);
setInterval
中匿名函数的作用域是Window。如果你想让它成为Slider实例,你应该先绑定它。
function Slider(tag){
this.tag = document.querySelector(tag),
this.start = function(){
return this.interval;
},
this.interval = setInterval(function(){
console.log(this.tag); //undefined
console.log(this); //window object
}.bind(this), 2000)
}
相关文章:
- 在另一个函数中使用变量this
- “var”变量,“this”变量和“global”变量 - 在JavaScript构造函数中
- Javascript对象文字,如何使用“this”来引用对象中的变量
- 使用变量self与this之间的区别
- Jquery从“this”内部的元素制作变量
- 变量“this”上下文在重新赋值变量后未更新
- 在控制台中列出正在运行的控制器实例及其 this 变量
- 由具有内联 JavaScript 的元素赋值的变量中的“this”对所有元素或已赋值的活动元素有效
- jQuery插件使用Backbone.js和require.js - 如何将“this”变量传递给依赖项
- 为什么要创建一个值为 this 的变量
- 在 JavaScript 中,在声明对象的新键:值对时,引用对象的变量名与使用“this”之间是否存在差异
- “this”与javascript中缓存变量的速度
- Jquery定义了一个$(this)变量,以便在许多函数中重用
- 使用变量作为“this.state”调用ReactJS的一部分
- 将“this”引用到自定义变量
- 为什么我在构造函数中附加“this”的变量会失去其绑定
- 在JavaScript类中声明变量:this与var.Difference
- 全局变量$(this)
- Javascript,承诺,如何在then范围内访问变量this
- 变量this不返回我所期望的