Javascript 变量这并没有返回我期望的结果
在下面的虚拟示例代码中,我创建了一个类(WindowResizer),它在调整浏览器窗口大小时侦听该窗口,在调整窗口大小250毫秒后,计时器调用属于WindowResizer类的方法(timerAlarm)。但此方法中的“this”变量是窗口对象。为什么?我应该怎么做才能到达WindowResizer的实例Javascript 变量这并没有返回我期望的结果,javascript,Javascript,在下面的虚拟示例代码中,我创建了一个类(WindowResizer),它在调整浏览器窗口大小时侦听该窗口,在调整窗口大小250毫秒后,计时器调用属于WindowResizer类的方法(timerAlarm)。但此方法中的“this”变量是窗口对象。为什么?我应该怎么做才能到达WindowResizer的实例 <script> $(document).ready(function () { var windowResizer = new WindowRe
<script>
$(document).ready(function () {
var windowResizer = new WindowResizer();
windowResizer.name = "Tester";
windowResizer.window = $(window);
windowResizer.attachEvents();
});
function WindowResizer(window) {
this.window = window;
}
WindowResizer.prototype.attachEvents = function () {
var self = this;
self.window.resize(function () {
clearTimeout(self.windowResizeTimer);
self.windowResizeTimer = setTimeout(self.timerAlarm, 250);
});
};
WindowResizer.prototype.timerAlarm = function () {
// Here the variable this is the window, but I want it to be the instance of WindowResizer that I created in the document ready-function, why!?
console.log(this);
}
</script>
$(文档).ready(函数(){
var windowResizer=新的windowResizer();
windowResizer.name=“测试仪”;
windowResizer.window=$(窗口);
windowResizer.attachEvents();
});
函数WindowResizer(窗口){
this.window=窗口;
}
WindowResizer.prototype.attachEvents=函数(){
var self=这个;
self.window.resize(函数(){
clearTimeout(self.windowResizeTimer);
self.windowResizeTimer=setTimeout(self.timerAlarm,250);
});
};
WindowResizer.prototype.timerAlarm=函数(){
//这里的变量this是window,但我希望它是我在documentready函数中创建的WindowResizer的实例,为什么!?
console.log(this);
}
另一个setTimeout函数中的setTimeout函数将在窗口范围内执行。您需要更改引用方法的方式
self.windowResizeTimer = setTimeout(self.timerAlarm, 250);
需要
self.windowResizeTimer = setTimeout(function(){self.timerAlarm();}, 250);
或
另一个setTimeout函数中的setTimeout函数将在窗口范围内执行。您需要更改引用方法的方式
self.windowResizeTimer = setTimeout(self.timerAlarm, 250);
需要
self.windowResizeTimer = setTimeout(function(){self.timerAlarm();}, 250);
或
另一个setTimeout函数中的setTimeout函数将在窗口范围内执行。您需要更改引用方法的方式
self.windowResizeTimer = setTimeout(self.timerAlarm, 250);
需要
self.windowResizeTimer = setTimeout(function(){self.timerAlarm();}, 250);
或
另一个setTimeout函数中的setTimeout函数将在窗口范围内执行。您需要更改引用方法的方式
self.windowResizeTimer = setTimeout(self.timerAlarm, 250);
需要
self.windowResizeTimer = setTimeout(function(){self.timerAlarm();}, 250);
或
非常感谢。但是我不明白为什么从以下位置更改时从不同的作用域调用它:self.windowResizeTimer=setTimeout(self.timerAlarm,250);to:self.windowResizeTimer=setTimeout(函数(){self.timerAlarm();},250);我在哪里可以读到更多关于这方面的信息?或者可能存在一个简单的解释?:)你读了标为dupe的问题的答案了吗?是的,我读了。现在我完全明白了。非常感谢。非常感谢。但是我不明白为什么从以下位置更改时从不同的作用域调用它:self.windowResizeTimer=setTimeout(self.timerAlarm,250);to:self.windowResizeTimer=setTimeout(函数(){self.timerAlarm();},250);我在哪里可以读到更多关于这方面的信息?或者可能存在一个简单的解释?:)你读了标为dupe的问题的答案了吗?是的,我读了。现在我完全明白了。非常感谢。非常感谢。但是我不明白为什么从以下位置更改时从不同的作用域调用它:self.windowResizeTimer=setTimeout(self.timerAlarm,250);to:self.windowResizeTimer=setTimeout(函数(){self.timerAlarm();},250);我在哪里可以读到更多关于这方面的信息?或者可能存在一个简单的解释?:)你读了标为dupe的问题的答案了吗?是的,我读了。现在我完全明白了。非常感谢。非常感谢。但是我不明白为什么从以下位置更改时从不同的作用域调用它:self.windowResizeTimer=setTimeout(self.timerAlarm,250);to:self.windowResizeTimer=setTimeout(函数(){self.timerAlarm();},250);我在哪里可以读到更多关于这方面的信息?或者可能存在一个简单的解释?:)你读了标为dupe的问题的答案了吗?是的,我读了。现在我完全明白了。非常感谢。