jQuery给一个类数组对象绑定一个事件时内部操作:
使用了call
图片.png
xxx.call(li,event),传入了两个对象,li是当前循环的li,那么函数里面的this就指向传入的当前循环li,event代表这个li对象,可以
e就是event
图片.png
图片.png
e代表当前单击的整个事件和成的一件事,给它命名为e
下面的e是一个变量,不是上面从call传入的event,这里的e仅仅是一个变量,保存传入的arguements数组第一个值,arguments是传入call的第二个参数数组,那么这里的call传入的是一个event,一个值,arguments[0]就代表这个传入的event,这个方法同上面一个方法相同,研究e是什么,把e打印出来,由于这里使用了call就可以借助函数的传参,研究这个传入的参数e到底是什么东西
图片.png
上面所有,函数xxx里面的this都指当前单击的li
图片.png
下面修改代码,把xxx里面的this的指定改为一个我们规定的值:
图片.png
图片.png
测试输出
bind可以强制指定this
bind(this)是一个函数,x.bind(this)不会有任何值的输出,x.bind(this)()才有值的输出才等价于 x.call(this)
图片.png
把整个li列表元素绑定,通过bind(this),把一个指定的this传入li列表
这里要注意了,bind和call的区别
图片.png
方方老师的文章你怎么还没搞懂 this?
call和apply的区别:
都是一个对象,第一个参数一样,传入this
第二个参数有区别,
xxx.call(this,1,2,3,4)
xxx.apply(this,[1,2,3])或
var a=[1,2,3]
xxx.apply(this,a)//apply的第二个参数必须为数组的引用值,[1,2,3]也是数组的引用值
代码
充分说明:
xxx.call({name:"yyy"})是一个对象(输出结果和它自己)
xxx.bind({name:"yyy"})是一个函数(输出undefined)
图片.png