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