gpt4 book ai didi

JavaScript "this"在事件处理程序中引用了错误的对象

转载 作者:行者123 更新时间:2023-11-29 22:42:06 25 4
gpt4 key购买 nike

我正在使用 Prototype 编写一些 MVC JavaScript 代码。问题是,当我在下面的代码片段中引用 this 时,它当然会引用 Window 对象,而我需要它来引用我的 Controller 实例,以便它可以调用我的 updateValue 函数,传递 HTML 元素 ID。

我想我必须使用 bindbindAsEventListener但我真的不明白该怎么做。

var Foo = {
Controller: Class.create({
observeEvents: function() {
$$("#myform input").each(function(input) {
input.observe("blur", this.updateValue(input.id); // <- wrong this!
});
},

updateValue: function(elementID) {
...
}
})
}

如有任何帮助,我们将不胜感激。

最佳答案

这应该有效。

    observeEvents: function() {
var Controller = this;
$$("#myform input").each(function(input) {
input.observe("blur", Controller.updateValue.bind(Controller, input.id));
});
...

如果您不想学习如何使用 bind(坦率地说,我不怪您)那么您可以忘记它,只需使用另一个小闭包即可。

    observeEvents: function() {
var Controller = this;
$$("#myform input").each(function(input) {
input.observe("blur", function(event) {
Controller.updateValue(input.id);
});
});
...

关于JavaScript "this"在事件处理程序中引用了错误的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2043380/

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