gpt4 book ai didi

javascript - 对象内函数中的 this 关键字

转载 作者:行者123 更新时间:2023-11-29 10:17:05 37 4
gpt4 key购买 nike

所以我将大部分函数和变量组织成基于对象的小模块,如下所示:

module1: {
someVariable: false,

someFunction: function(e) {
do some stuff using someVariable
},

someFunction2: function(e) {
do some other stuff
}
}

我将这些函数称为各种事件期间的回调,如下所示:

$(function() {
$('.thing').on('mouseenter', module1.someFunction);
}

现在,在 someFunction 中,我希望“this”关键字引用包含该函数的对象。相反,它指的是触发触发函数的事件的 DOM 元素。除了编写 module1.someVariable 之外,还有什么我可以访问函数的包含对象中的 someVariable 变量?

最佳答案

最短的答案是试试这个:

$(function() {
$('.thing').on('mouseenter', function(e) {
module1.someFunction(e);
});
}

如果直接在对象上调用方法,则“this”值仅设置为方法附加到的对象:

module1.someFunction(); // direct invocation, 'this' will be set properly
var tempFunc = module1.someFunction;
tempFunc(); // the function was removed first. 'this' will NOT be set

在您的情况下,您正在从对象中剥离方法并将其交给事件处理程序。事件处理程序不知道该对象,也不执行直接调用。

事实上,事件处理程序显式 覆盖了上下文,因为这就是 jQuery API 的定义方式。如果你想要你正在谈论的行为,你必须明确地覆盖它。

使用像 underscore.js 这样的库你也可以 bind将函数传递给事件处理程序。

$(function() {
$('.thing').on('mouseenter', _.bind(module1.someFunction, module1));
}

我相信 Object.bind 应该在未来没有库的情况下得到原生支持,但你还不能依赖旧浏览器来支持它。

关于javascript - 对象内函数中的 this 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19433183/

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