我正在查看jQuery ToolTip插件的代码(以下简称Tooltip),并注意到我不完全理解的行为。
工具提示绑定鼠标悬停功能,如下所示:
.mouseover(save)
以这种方式调用时,this
变量为HtmlDivElement
。
我尝试将mouseover
更改为:
.mouseover(function(e){save(event)})
因为我正在寻找MouseEvent。但是,现在this
变量为Window
。
通过使用以下代码行,我找到了另一种方法来获取HtmlDivElement
:
.mouseover(function(e){save(this, event)})
并使用this
作为函数内this
的替换。
我的问题是 - 为什么save
函数在鼠标悬停绑定中的匿名函数内被调用时会失去它的范围?
答案 0 :(得分:1)
this
的值在每次函数调用时建立。当您的匿名函数调用" save"函数,它没有做任何事情来确定this
应该是什么,所以它是默认值:全局对象("窗口")。
你可以这样做:
.mouseover(function(e){ save.call(this, e); })
使this
获取您需要的值。处理程序中的this
值将由框架排列,因此使用.call()
您将其传递给" save"功能
重复:在JavaScript中,this
不是由代码的静态结构决定的。相反,它取决于每个函数调用的情况。这意味着对于任何函数,无论它如何声明,this
的值都可能是任何给定函数调用的完全意外。