this指向问题

本文详细探讨了JavaScript中的this概念及其在不同调用场景下的指向问题,包括函数调用、作为对象方法调用、构造函数调用以及call和apply的使用。重点阐述了call与apply如何改变函数的上下文,并总结了this的确定原则:在调用时由调用方式决定。
摘要由CSDN通过智能技术生成

关于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的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值