对正在发生的事情的解释。Pointy 的回答很好,但我想更笼统地解释一下。一个很好的研究this
可以在这里找到
事件处理程序只是一个回调。你向它传递一个函数和一个事件来监听。实际上,它所做的就是调用该函数。
Animation.init 只是该功能的吸气剂。可以这样想:
var callback = Animation.init
animBtn.addEventListener('click', callback, false);
...
// internal browser event handler
handler() {
// internal handler does stuff
...
// Oh click event happened. Let's call that callback
callback();
}
所以你所做的一切都被传入
var callback = function(){
this.doTheMove(); // I'm calling the function here, but it gives an error.
}
默认情况下在 javascript 中this === window
。这将引用全局对象,如果它没有设置为某事。净效应就是window.doTheMove
所谓的。而且该功能不存在。
在这种情况下,因为callback
实际上是由事件处理程序调用的,所以this
对象指向触发事件的 DOM 对象,因此您的调用node.doTheMove
仍然不存在。
你想要做的是用对动画的引用来包装它。
var callback = function() {
Animation.init();
}
这是一个函数执行,它init
在Animation
. 当您在这样的对象上执行它时,然后在内部this === Animation
按照您的期望。
总结一下。这里的问题是这Animation.init
只是对函数的引用。它没有关于Pointy提到的其他任何信息的信息。