一句話喝噪,call的第一個參數(shù)
看幾個例子
例1.
button1.onclick = function(){
console.log(this)
}
這里的this是什么汰现?
不要靠猜,是call的第一個參數(shù)君账,不知道去看MDN繁堡。
MDN的解釋:處理器里的 this 值是觸發(fā)事件的元素。
所以這里的this肯定就是button了
我們可以這樣來改一改:
button1.onclick = function(){
console.log(this)
}
button1.onclick.call({name: 'hua'})
這里就非常明顯乡数,this就是call的第一個參數(shù)椭蹄。
例2.
button2.addEventListener('click',function(){
console.log(this)
})
MDN的解釋:通常來說this的值是觸發(fā)事件的元素的引用
所以this肯定是button
例3.
$('ul').on('click', 'li', function(){
console.log(this)
})
文檔解釋:當jQuery的調(diào)用處理程序時,this關鍵字指向的是當前正在執(zhí)行事件的元素净赴。對于直接事件而言绳矩,this 代表綁定事件的元素。對于代理事件而言劫侧,this 則代表了與 selector 相匹配的元素埋酬。
在這個例子中selector就是li哨啃,所以this就是li
例4.
function X(){
return object = {
name: 'object',
f1(x){
x.f2() //調(diào)用options中的f2
},
f2(){
console.log('object')
console.log(this)
}
}
}
var options = {
name: 'options',
f1(){},
f2(){
console.log('options')
console.log(this) //打印
}
}
var x = X()
x.f1(options)
會打印出什么呢烧栋?
做一個分析:x就是X返回的東西,也就是object拳球,接下來調(diào)用object中的f1审姓,并且傳入options,那么f1中的x.f2()
祝峻,實際上調(diào)用的是options中的f2魔吐,所以this指向options,打印出options
例5.
對上邊的做一個修改
function X(){
return object = {
name: 'object',
options: null,
f1(x){ // 傳入options
this.options = x //將自身的options也變?yōu)閭魅氲膐ptions
this.f2() //this莱找,還是自己酬姆,調(diào)用obejct的f2
},
f2(){
this.options.f2.call(this) //this.options是options,調(diào)用它的f2奥溺,并且將object當做this傳過去
}
}
}
var options = {
name: 'options',
f1(){},
f2(){
console.log('options')
console.log(this) //打印
}
}
var x = X()
x.f1(options)