如何协调“this”引用DOM元素和“this”引用类?

How to reconcile 'this' referencing DOM element and 'this' referencing class?

提问人:Dylan B 提问时间:7/4/2022 最后编辑:tborgesDylan B 更新时间:7/4/2022 访问量:37

问:

我在理解如何使用关键字来引用已单击的 DOM 元素时遇到了问题,但也在通常引用该类实例的类中使用它。thisthis

下面是相关代码的片段:

class Passwords {
  constructor() {
    $('.password-column button.steel-button').on('click', this.selectButton);
  }
  
  selectButton() {
    $(this).toggleClass('selected');
    this.columnController();
  }
  
  columnController(){
    // A function that does something else
  }
}

我遇到的问题是它无法识别为函数。 我想这是因为范围以及它如何与“这个”一起工作,但我不确定如何进行。columnController()

在上面的代码中,已成功应用于所有指定的按钮,但错误在 上给出。 确切的控制台错误是:selectButton()this.columnController()

未捕获的 TypeError:this.columnController 不是函数

先谢谢你。

JavaScript jQuery 这个

评论


答:

0赞 Quentin 7/4/2022 #1

你不能用它来表示这两个对象,所以选择一个,然后通过其他机制得到另一个。this

例如:使用箭头函数将值绑定到类,然后从对象中获取元素。thisevent

class Passwords {
  constructor() {
    $('.password-column button.steel-button').on('click', this.selectButton);
  }

  selectButton = (event) => {
    $(event.currentTarget).toggleClass('selected');
    this.columnController();
  }

  columnController() {
    console.log("this runs");
  }
}

new Passwords();
.selected {
  background: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="password-column">
  <button class="steel-button">click</button>
</div>

评论

1赞 Bergi 7/4/2022
...或者,将类实例存储在闭包变量 () 中,并使用 访问该元素。const that = thisthis
0赞 Dylan B 7/4/2022
被选为正确答案,但值得注意的是,它将 event.currentTarget 标记为已弃用。不过确实有效。
0赞 Quentin 7/4/2022
文档说 currentTarget 是在 v1.3 中添加的,但没有说它已被弃用。