“关联数组中的Javascript函数”;不是一个函数;

“关联数组中的Javascript函数”;不是一个函数;,javascript,jquery,javascript-objects,Javascript,Jquery,Javascript Objects,最近我了解到Javascript ES6有类,所以我尝试了它们,但我的函数总是给我错误,说它们不存在。所以我使用javascript关联数组创建了伪类在我添加一些新方法之前,它工作得非常好 以下是我收到的错误消息: EventListener.js:132 Uncaught TypeError: this.listen_for_tab_swap is not a function at HTMLDivElement.<anonymous> (EventListener.js:132)

最近我了解到Javascript ES6有类,所以我尝试了它们,但我的函数总是给我错误,说它们不存在。所以我使用javascript关联数组创建了伪类在我添加一些新方法之前,它工作得非常好

以下是我收到的错误消息:

EventListener.js:132 Uncaught TypeError: this.listen_for_tab_swap is not a function
at HTMLDivElement.<anonymous> (EventListener.js:132)
at Object.alert_eventlistener_of_tabs (EventListener.js:41)
at Object.new_tab (EventListener.js:59)
alert_eventlistener_of_tabs @ EventListener.js:41
new_tab @ EventListener.js:59
xhr.onreadystatechange @ EventListener.js:94
XMLHttpRequest.send (async)
(anonymous) @ EventListener.js:101

如果需要排除故障,请告诉我是否需要任何其他信息。提前感谢您的帮助。

在js
中,这是动态的。这取决于函数的调用方式。我假设您使用的是jQuery,因为它看起来很像jQuery语法,所以对于您的特定情况,您需要知道的是,在jQuery(以及常规javascript)中,onclick事件中的
this
的值是触发事件的元素:

{
  // ...

  listen_for_tabs_activation: function() {
     $("#AZ_content").on("tabs_loaded", function () {
         this.listen_for_tab_swap(); // this is AZ_content
     });
}
在上面的代码中,您正在尝试调用
$(“#AZ_content”)[0]。listen_for_tab_swap()
,它抱怨HTML元素没有名为
listen_for_tab_swap

有几种方法可以解决这个问题。最简单的方法可能是:

eventListener.listen_for_tab_swap();
您还可以使用箭头函数绑定此

{
  // ...

  listen_for_tabs_activation: function() {
     $("#AZ_content").on("tabs_loaded",() => { // this fixes `this`
         this.listen_for_tab_swap();
     });
}

还有很多方法可以解决这个问题。查看另一个相关问题的答案,了解该的实际行为:

在js
中,该
是动态的。这取决于函数的调用方式。我假设您使用的是jQuery,因为它看起来很像jQuery语法,所以对于您的特定情况,您需要知道的是,在jQuery(以及常规javascript)中,onclick事件中的
this
的值是触发事件的元素:

{
  // ...

  listen_for_tabs_activation: function() {
     $("#AZ_content").on("tabs_loaded", function () {
         this.listen_for_tab_swap(); // this is AZ_content
     });
}
在上面的代码中,您正在尝试调用
$(“#AZ_content”)[0]。listen_for_tab_swap()
,它抱怨HTML元素没有名为
listen_for_tab_swap

有几种方法可以解决这个问题。最简单的方法可能是:

eventListener.listen_for_tab_swap();
您还可以使用箭头函数绑定此:

{
  // ...

  listen_for_tabs_activation: function() {
     $("#AZ_content").on("tabs_loaded",() => { // this fixes `this`
         this.listen_for_tab_swap();
     });
}

还有很多方法可以解决这个问题。查看另一个相关问题的答案,了解该
的实际行为:

您没有使用类。您只是在向对象中添加碰巧是函数的元素。我知道。我称之为“伪类”。我不否认他们有真实姓名。你不能在普通对象中使用
this
。您必须将函数添加到原型中。@LuketheGeek您实际上可以对普通对象使用
这个
,这就是对象的工作方式。问题是该函数中的
不是OP所期望的be@slebetman当我通过chrome中的开发者控制台访问eventListener对象时,它确实会说eventListener.listen\u for\u tab\u swap未定义。您没有使用类。您只是在向对象中添加碰巧是函数的元素。我知道。我称之为“伪类”。我不否认他们有真实姓名。你不能在普通对象中使用
this
。您必须将函数添加到原型中。@LuketheGeek您实际上可以对普通对象使用
这个
,这就是对象的工作方式。问题是该函数中的
不是OP所期望的be@slebetman当我通过chrome中的开发者控制台访问eventListener对象时,它确实会说eventListener.listener\u for\u tab\u swap未定义。我仅通过阅读您的一点回答就找到了解决方案。你教会了我很多。谢谢。我从你的答案中只看了一点就找到了解决办法。你教会了我很多。非常感谢。