1

我正在研究 jQuery ToolTip 插件(以下简称 Tooltip)的代码,并注意到我不完全理解的行为。

Tooltip 绑定一个 mouseover 函数,如下所示:

.mouseover(save)

以这种方式调用时,this变量是HtmlDivElement.

我尝试将其更改mouseover为:

.mouseover(function(e){save(event)})

因为我正在寻找 MouseEvent。但是,现在this变量是Window.

我找到了一种方法来解决这个问题并HtmlDivElement通过使用这行代码来获得:

.mouseover(function(e){save(this, event)})

this用作this函数内部的替代品。

我的问题是-为什么save在鼠标悬停绑定内的匿名函数内调用该函数时会失去其范围?

4

1 回答 1

1

的值this是在每个函数调用时建立的。当您的匿名函数调用该“保存”函数时,它没有做任何事情来确定this应该是什么,所以它是默认值:全局对象(“窗口”)。

你可以这样做:

.mouseover(function(e){ save.call(this, e); })

承担this您需要的价值。处理程序中的this值将由框架安排,因此通过使用.call()您将其传递给“保存”函数。

再说一遍:在 JavaScript 中,this不是由代码的静态结构决定的。相反,它取决于每个单独的函数调用的情况。这意味着对于任何函数,无论它是如何声明的,this在任何给定的函数调用中, 的值都可能完全出乎意料。

于 2012-08-20T14:04:33.210 回答