Javascript 变量这并没有返回我期望的结果

Javascript 变量这并没有返回我期望的结果,javascript,Javascript,在下面的虚拟示例代码中,我创建了一个类(WindowResizer),它在调整浏览器窗口大小时侦听该窗口,在调整窗口大小250毫秒后,计时器调用属于WindowResizer类的方法(timerAlarm)。但此方法中的“this”变量是窗口对象。为什么?我应该怎么做才能到达WindowResizer的实例 <script> $(document).ready(function () { var windowResizer = new WindowRe

在下面的虚拟示例代码中,我创建了一个类(WindowResizer),它在调整浏览器窗口大小时侦听该窗口,在调整窗口大小250毫秒后,计时器调用属于WindowResizer类的方法(timerAlarm)。但此方法中的“this”变量是窗口对象。为什么?我应该怎么做才能到达WindowResizer的实例

    <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的问题的答案了吗?是的,我读了。现在我完全明白了。非常感谢。