关于this指向问题
前言
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
一、this是什么?
面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
二、this指向
1.以函数形式调用时,this指向的是window
function a(){
var user = "追梦子";
console.log(this.user); //undefined
console.log(this); //Window
}
window.a();
2.以方法的形式调用时,this时调用方法的对象
var o = {
user:"追梦子",
fn:function(){
console.log(this.user); //追梦子
}
}
o.fn();
3.以构造函数的形式调用时,this是新创建的那个对象
function Fn(){
this.user = "追梦子";
}
var a = new Fn();
console.log(a.user); //
4.使用call和apply调用时,this是指向的那个对象
三,call与apply
1. 这两个方法都是函数对象的方法,需要通过函数对象来调用
2. 当对函数调用call与apply都会调用函数执行
3. 在调用call与apply可以将一个对象指定为第一个参数,此时这个对象将会成为函数中的this
4. call方法可以将实参在对象之后依次传递
5. apply方法需要将实参封装到一个数组中统一传递
总结
this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。