JS:this指向问题

89 阅读1分钟

在绝大多数情况下,函数的调用方式决定了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会返回一个新的函数而不是直接调用