javascript:如何更改;这";活动范围

javascript:如何更改;这";活动范围,javascript,this,Javascript,This,我已经打开了关于Function.prototype.bind的MDN文档,但我的脚本仍然无法工作 我希望此引用添加到addEventListener的htmlElement。问题是,为什么我的这个指的是对象窗口 以下是不带bind()的脚本: 那么,如何解决这个问题呢?诀窍是,您希望在调用enterForm的上下文中调用doLogin,您可以使用或: call和apply确保将调用它们的函数内部的设置为传递给它们的第一个参数(例如,我们可以调用doLogin.call({x:1})并获得[ob

我已经打开了关于Function.prototype.bind的MDN文档,但我的脚本仍然无法工作

我希望
引用添加到addEventListener的htmlElement。问题是,为什么我的
这个
指的是对象窗口

以下是不带bind()的脚本:


那么,如何解决这个问题呢?

诀窍是,您希望在调用
enterForm
的上下文中调用
doLogin
,您可以使用或:

call
apply
确保将调用它们的函数内部的
设置为传递给它们的第一个参数(例如,我们可以调用
doLogin.call({x:1})
并获得
[object object]
的警报)

如果您总是希望在
HTMLButtonElement
的上下文中调用
doLogin
,则可以使用以下命令将该函数替换为同一函数的绑定版本:

bind
创建调用它的函数的新版本,并将
永久绑定到传递给它的第一个参数。同样,如果我们这样做:

var newLogin = doLogin.bind({x: 1});

每次调用
newLogin
时,它都会被调用,其
上下文设置为匿名
{x:1}
对象(即使我们调用了
newLogin.call(12)
newLogin.apply(someObject)
)诀窍在于,您希望在调用
enterForm
的上下文中调用
doLogin
——为此,您可以使用或:

call
apply
确保将调用它们的函数内部的
设置为传递给它们的第一个参数(例如,我们可以调用
doLogin.call({x:1})
并获得
[object object]
的警报)

如果您总是希望在
HTMLButtonElement
的上下文中调用
doLogin
,则可以使用以下命令将该函数替换为同一函数的绑定版本:

bind
创建调用它的函数的新版本,并将
永久绑定到传递给它的第一个参数。同样,如果我们这样做:

var newLogin = doLogin.bind({x: 1});

每次调用
newLogin
时,它都会被调用,其
上下文设置为匿名
{x:1}
对象(即使我们调用了
newLogin.call(12)
newLogin.apply(someObject)

您是如何尝试使用
bind
的?最简单的解决方案就是在您的呼叫中传递
ev
this
doLogin(ev)。或者,您可以使用
call
apply
显式设置接收者,但这会使简单的事情变得过于复杂。此外,您似乎希望以两种可能的方式处理表单提交;为什么不处理一次提交事件呢?:D谢谢@minitech,我从来没有使用过
您是如何尝试使用
bind
的?最简单的解决方法就是在您的通话中传递
ev
doLogin(ev)。或者,您可以使用
call
apply
显式设置接收者,但这会使简单的事情变得过于复杂。此外,您似乎希望以两种可能的方式处理表单提交;为什么不处理一次提交事件呢?:D谢谢@minitech,我从不使用
function doLogin() { alert(this); }
doLogin = doLogin.bind(handle1);
var newLogin = doLogin.bind({x: 1});