为了账号安全,请及时绑定邮箱和手机立即绑定

$(this),请问jQuery是怎么返回的这个jQuery对象

$(this),请问jQuery是怎么返回的这个jQuery对象

POPMUISE 2018-07-20 19:16:09
例如<div id="box">**</div>$("#box").click(function(){    $(this).css({color:red}) })我们知道此时$(this)指的是jq对象,此时console.log($(this))输出[div#box],请问jQuery在内部是怎么把$(this)和上下文联系起来的不知道有没有把我的问题描述清楚~~
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

这个和jquery无关吧 = =

首先看一下js的事件绑定:

注:下面代码中,console.log($(this)) 使用的是 jquery 的语法

    document.getElementById('box').addEventListener('click',function(){

        console.log(this);

        console.log($(this));

    });

    document.getElementById('box').addEventListener('click',clickHandle);

    function clickHandle(){

        console.log(this);

        console.log($(this));

    }

https://img1.sycdn.imooc.com//5b55e18b000134c002840083.jpg

结果很明显,原生js的事件监听中,在事件处理函数里面你输出 this 就是监听事件的dom。

jquery无论是 live on bind 本质上还是事件监听,包括click() 因此使用$(this) 输出jquery的dom对象很正常。无非你又使用$(this)把dom对象封又装了一次成jquery DOM对象。

查看完整回答
反对 回复 2018-07-23
?
GCT1015

TA贡献1827条经验 获得超4个赞

首先要理解的是js中函数的this是指向调用这个函数的对象,在jq里面,在一个对象上调用一个方法并引入一个匿名函数作为参数时,jq会将函数中的this指向到其触发的原生节点对象上,这里就比如#box节点。
然后$()是jq将原生节点对象包装为jq对象,使其能够使用各类的jq方法。

查看完整回答
反对 回复 2018-07-23
  • 2 回答
  • 0 关注
  • 1230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信