在绝大多数情况下,函数的调用方式决定了this的指向,即谁调用了函数,函数内的this就指向谁,看几个例子了解一下
function foo(){
console.log(this)
}
foo();//window
let obj = {
objfn:foo
}
obj.objfn();//objfn
document.getElementById('btn').onclick = function(){
console.log(this);//<button id="btn"></button>
//指向绑定事件的元素
}
//如果在html中绑定事件,则指向window
影响this指向的操作
使用apply,call,bind改变this指向
function fn(){
console.log(this.name)
}
let obj1 = {
name:'obj1'
}
let obj2 = {
name:'obj2'
}
let obj3 = {
name:'obj3'
}
fn.apply(obj1);//obj1
fn.call(obj2);//obj2
fn.bind(obj3)();//obj3
三种方法本质其实都是叫
别人去调用自己,因此改变了this指向,其中bind会返回一个新的函数而不是直接调用