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