• this指向问题


    我今天下午本来想做个就是tr鼠标移出之后过三秒把对应的input添加hiddens类

    然后我就这样写了

    $('.table>tbody>tr').mouseout(function(){
      var index=$(this).index();
      setTimeout(function(){
      console.log(index);
      console.log($(this));
      $(this).parents('.table').siblings('.check-btn').children('p').eq(index).children('input').addClass('hiddens');
    },3000);

    然后就一直不能得到我想要的效果

    然后我就打印了setTimeout里面的this

    发现this指向了window

    我去

    我本意是想指向tr的呀

    然后我就发现可能是闭包了

    然后我对闭包也并不熟悉

    然后我就看书了

    然后我就找到了解答的方案

    如下

        $('.table>tbody>tr').mouseout(function(){
                        var index=$(this).index();
                        var that=$(this);
                        setTimeout(function(){
                            console.log(that);
                            that.parents('.table').siblings('.check-btn').children('p').eq(index).children('input').addClass('hiddens');
                        },3000);
                    })

    看到了吗

    用that=$(this)

    在setTimeout外面定义

    哇撒

    然后that就指向了tr

    但是这时我又有疑惑了

    为什么setTimeout里面this会指向window呢

    然后就发现我知识太少了

    然后就得到了小伙伴的指导

    原来

    setTimeout是挂在window上面的全局方法

    是不是一目了然就知道了我疑惑setTimeout里面的this指向问题

    ps:原谅我的知识有限,经过园友的指出,原来这个不是闭包问题,所以我就改正了,谢谢谢谢各位园友,园友的力量是伟大的:

      还有问了一些小伙伴说:闭包是变量的作用域的问题,这个是改变了 this 指向的

  • 相关阅读:
    git branch用法总结
    vue-router异步加载组件
    vue错误提示 Cannot read property 'beforeRouteEnter' of undefined,刷新后跳到首页
    websocket常见错误
    Websocket原理
    怎么在overflow-y:sroll的情况下 隐藏滚动条
    URI和URL有什么区别
    确定浏览器是否支持某些DOM模块
    将nodeList转换为数组(兼容性)
    软件的三种版本
  • 原文地址:https://www.cnblogs.com/lwwen/p/6062649.html
Copyright © 2020-2023  润新知