jQuery給一個(gè)類數(shù)組對(duì)象綁定一個(gè)事件時(shí)內(nèi)部操作:
使用了call
xxx.call(li,event),傳入了兩個(gè)對(duì)象百匆,li是當(dāng)前循環(huán)的li鼻弧,那么函數(shù)里面的this就指向傳入的當(dāng)前循環(huán)li,event代表這個(gè)li對(duì)象,可以
e就是event
e代表當(dāng)前單擊的整個(gè)事件和成的一件事暇屋,給它命名為e
下面的e是一個(gè)變量似袁,不是上面從call傳入的event,這里的e僅僅是一個(gè)變量,保存?zhèn)魅氲腶rguements數(shù)組第一個(gè)值咐刨,arguments是傳入call的第二個(gè)參數(shù)數(shù)組昙衅,那么這里的call傳入的是一個(gè)event,一個(gè)值,arguments[0]就代表這個(gè)傳入的event,這個(gè)方法同上面一個(gè)方法相同定鸟,研究e是什么而涉,把e打印出來(lái),由于這里使用了call就可以借助函數(shù)的傳參联予,研究這個(gè)傳入的參數(shù)e到底是什么東西
上面所有婴谱,函數(shù)xxx里面的this都指當(dāng)前單擊的li
下面修改代碼,把xxx里面的this的指定改為一個(gè)我們規(guī)定的值:
測(cè)試輸出
bind可以強(qiáng)制指定this
bind(this)是一個(gè)函數(shù)躯泰,x.bind(this)不會(huì)有任何值的輸出,x.bind(this)()才有值的輸出才等價(jià)于 x.call(this)
把整個(gè)li列表元素綁定华糖,通過(guò)bind(this),把一個(gè)指定的this傳入li列表
這里要注意了麦向,bind和call的區(qū)別
方方老師的文章你怎么還沒(méi)搞懂 this?
call和apply的區(qū)別:
都是一個(gè)對(duì)象客叉,第一個(gè)參數(shù)一樣诵竭,傳入this
第二個(gè)參數(shù)有區(qū)別,
xxx.call(this,1,2,3,4)
xxx.apply(this,[1,2,3])或
var a=[1,2,3]
xxx.apply(this,a)//apply的第二個(gè)參數(shù)必須為數(shù)組的引用值兼搏,[1,2,3]也是數(shù)組的引用值
代碼
充分說(shuō)明:
xxx.call({name:"yyy"})是一個(gè)對(duì)象(輸出結(jié)果和它自己)
xxx.bind({name:"yyy"})是一個(gè)函數(shù)(輸出undefined)