JavaScript中this指向问题

本文详细探讨了JavaScript中this对象的四种主要情况:1) 全局函数中this指向window;2) 函数作为对象方法时,this指向该对象;3) 构造函数中,this指向新创建的实例;4) call和apply方法可以改变this的指向。通过示例展示了call和apply如何在不同场景下影响this的绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于this对象

this对象是在运行时基于函数的执行环境绑定的;

this大致分为四类

一、直接函数调用

在全局函数中,this等于window

const name = 'sun';
function getName() {
  return this.name;
}
getName();  // sun

二、函数作为某个对象的方法调用时

this等于那个对象,匿名函数的执行环境具有全局性,因此this通常指向window,

const name = 'sun';
function getName() {
  return this.name;
}
const obj = {
  name:'lili',
  getName,
}
obj.getName();  // lili

// 闭包中匿名函数
const name = 'sun';
const obj = {
    name:'lili',
    getName:function() {
        return function() {
            return this.name;
        };
    }
};
obj.getName()();  // 'sun'

三、构造函数

this指向构造函数实例化后的对象

function Person() {
  this.name = 'li';
}
const person1 = new Person();
person1.name // li

四、是call和apply函数改变this指向

call 和 apply是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this指的就是这第一个参数。

const name = 'sun';
function getName() {
  return this.name;
}
const obj = {
  name:'lili',
  getName,
}
obj.getName.apply();  // sun

当call  或  apply 的参数为空时,默认调用全局对象。因此,这时的运行结果为sun,证明this指的是全局对象。

如果把上面代码最后一行修改为

const name = 'sun';
function getName() {
  return this.name;
}
const obj = {
  name:'lili',
  getName,
}
obj.getName.apply(obj);  // lili

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值