关于this指向问题的总结
当函数以函数形式调用时,this指向window对象
function fun(){
console.log(this)
}
fun()
当函数以方法形式调用时,this指向调用该方法的对象
let obj = {
name: "Bob",
sayName(){
console.log(this.name)
}
}
obj.sayName();
当函数以构造函数形式调用时,this指向新创建的对象
function Person(name){
this.name = name;
}
let per1 = new Person("Bob")
console.log(per1.name)
let per2 = new Person("Alice")
console.log(per2.name)
当使用call、apply、bind调用时,this指向指定的对象
function fun(){
console.log(this.name)
}
let obj1 = {
name: "Bob"
}
let obj2 = {
name: "Alice"
}
fun.call(obj1)
fun.call(obj2)
fun.apply(obj1)
fun.apply(obj2)
fun.bind(obj1)()
fun.bind(obj2)()
当使用箭头函数时,this指向函数定义时所在的对象
window.name = "Bob"
let obj = {
name : "Alice"
}
let fun1 = function() {
console.log(this.name)
}
let fun2 = () => {
console.log(this.name)
}
fun1()
fun2()
fun1.call(obj)
fun2.call(obj)