this是JS中的一个关键字,它始终指向一个对象,this是一个指针。
this的指向不是由定义this决定的,而是随着脚本的解析自动赋值的。
一、全局作用域下:this始终指向window对象
二、函数作用域下:函数被谁调用,this就指向谁
三、对象中的函数作用域下:this指向该方法所属的对象
四、在构造函数中:this始终指向新对象
五、自执行函数中:this指向window
六、箭头函数中:this是在定义是绑定到了父级对象上,不是在执行过程中绑定的。
更改this指向方法:
1. call(thisObj, 参数1,参数2 ...)
var person = {
name: 'zhangsan',
age: 20
}
function say(x, y){
console.log(this.name)
console.log(this.age)
console.log(x, y)
}
say.call(person, 1, 2)// zhangsan// 20// 1 2
2. apply(thisObj, [参数1,参数2 ...])
var person = {
name: 'zhangsan',
age: 20
}
function say(x, y){
console.log(this.name)
console.log(this.age)
console.log(x, y)
}
say.apply(person, [1, 2])
// zhangsan
// 20
// 1 2
3.bind(thisObj, 参数1,参数2 ...)
var person = {
name: 'zhangsan',
age: 20
}
function say(x, y){
console.log(this.name)
console.log(this.age)
console.log(x, y)
}
say.bind(person, 1, 2)();
// zhangsan
// 20
// 1 2