onclick无法在javascript类内调用嵌套函数

nxowjjhe  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(481)

我有一个javascript类,其中至少有3个函数。我有一个链接,但是我想给这个链接的onclick事件添加一些逻辑。
不幸的是,它无法识别嵌套函数,可能是因为 this 还不够清楚。

  1. class MyJsClass {
  2. dummyFunc1() {
  3. $('#my-link').click(function() {
  4. console.log('test');
  5. this.dummyFunc2();
  6. });
  7. }
  8. dummyFunc2() {
  9. console.log('dummyfunc2');
  10. this.dummyFunc3();
  11. }
  12. dummyFunc3() {
  13. console.log('dummyfunc3');
  14. }
  15. }

这不起作用,所以我对它做了一点这样的修改,但仍然不起作用 Cannot read property 'dummyFunc3' of undefined :

  1. dummyFunc1() {
  2. var dummyfunc2 = this.dummyFunc2();
  3. $('#my-link').click(function() {
  4. console.log('test');
  5. dummyfunc2();
  6. });
  7. }
gmxoilav

gmxoilav1#

jquery方法/函数内部(如 .click() 等) this 有自己的背景 jQuery 对象示例,其中 this 是返回的dom元素。
改用箭头函数 => 因为它没有自己的绑定到 this -因此制造 this 请参阅所需的类示例:

1.使用箭头功能

  1. class MyJsClass {
  2. dummyFunc1() {
  3. $('#my-link').on("click", (evt) => {
  4. // If needed use evt.currentTarget instead of this
  5. // console.dir(evt.currentTarget); // {}<div id="my-link" />
  6. this.dummyFunc2(); // this == MyJsClass instance
  7. });
  8. }
  9. dummyFunc2() {
  10. console.log('dummyfunc2');
  11. this.dummyFunc3();
  12. }
  13. dummyFunc3() {
  14. console.log('dummyfunc3');
  15. }
  16. }
  17. const MJSC = new MyJsClass();
  18. MJSC.dummyFunc1();
  1. <a id="my-link">CLICK ME</a>
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

2.使用function.prototype.bind

如果需要,还有不推荐的$.proxy:

  1. $('#my-link').on("click", $.proxy(this.dummyFunc2, this));

jQuery3.3中的哪个可以更好地与js的function.prototype.bind结合使用

  1. class MyJsClass {
  2. dummyFunc1() {
  3. $('#my-link').on("click", this.dummyFunc2.bind(this));
  4. }
  5. dummyFunc2() {
  6. console.log('dummyfunc2');
  7. this.dummyFunc3();
  8. }
  9. dummyFunc3() {
  10. console.log('dummyfunc3');
  11. }
  12. }
  13. const MJSC = new MyJsClass();
  14. MJSC.dummyFunc1();
  1. <a id="my-link">CLICK ME</a>
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
展开查看全部

相关问题