gpt4 book ai didi

javascript - 立即绑定(bind)用于事件处理的 Javascript 对象方法

转载 作者:行者123 更新时间:2023-11-30 18:15:15 25 4
gpt4 key购买 nike

我想使用事件处理函数作为 Javascript 对象的一部分。我想将事件处理程序中的“this”绑定(bind)到它是其方法的对象,因为事件处理程序中的“this”通常会自动分配给事件发生的对象。

这可以通过对发生绑定(bind)的对象使用初始化函数来完成 (jsfiddle for tryout):

var myObject = {
init:function(){
this.downHandler = this.downHandler.bind(this);
},
downHandler:function(){
alert(this.someInfo);
},
someInfo:"hi there"
}
myObject.init();

我想避免这种情况:在其他地方重新定义它会降低代码的可维护性。所以我正在寻找一种解决方案,使绑定(bind)过程保持在方法本身。

我已经尝试过立即执行函数,但在立即执行时,“this”指向“window”对象(假设是浏览器上下文)。我的试验看起来像这样:

var myObject = {
//more code
downHandler:(function(){
alert(this.someInfo);
}).bind(this), //does not work since at the point of immediate execution, the this is assigned to window
//more code
}

你能想出一种方法,将绑定(bind)保留在事件处理函数中,而不是在单独的初始化函数中吗?

最佳答案

因为你已经加载了 jQuery,所以使用 jQuery.proxy

var myObject = {
downHandler: $.proxy(function(){
alert(this.someInfo);
}, this)
};

如果你有Underscore安装(我更喜欢这样的东西),使用 _.bind

var myObject = {
downHandler: _.bind(function(){
alert(this.someInfo);
}, this
};

MooTools 可能也有类似的东西——我从来没有考虑过使用它。

关于javascript - 立即绑定(bind)用于事件处理的 Javascript 对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com