千家信息网

javascript的this指向怎么理解

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本文小编为大家详细介绍"javascript的this指向怎么理解",内容详细,步骤清晰,细节处理妥当,希望这篇"javascript的this指向怎么理解"文章能帮助大家解决疑惑,下面跟着小编的思路
千家信息网最后更新 2026年11月04日javascript的this指向怎么理解

本文小编为大家详细介绍"javascript的this指向怎么理解",内容详细,步骤清晰,细节处理妥当,希望这篇"javascript的this指向怎么理解"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

this的指向

在我们看见的各种介绍如何判断this的指向方法中,"this的最终指向的是那个调用它的对象" 这句话被视作核心,但是面对多种多样的情况,我们容易搞混。针对针对多种情况结合我的理解,我提出了一句话 "箭头,定时和构造,特殊情况特殊看,普通调用看点号,后面有点不看前,然后就近原则判,最后剩下就是window"。

箭头函数

箭头函数的本身没有this,所有不存在this改变,它捕获外层的this使用

var name = "windowsName";var a = {    name: "Cherry",    fn() {      setTimeout(()=>{        console.log(this.name);       },0)    }}a.fn() //Cherry

解析: 首先对象a调用fn函数,所以fn函数的this指向对象a,然后箭头捕获外层this,那么就不是setTimeout里的this,而是fn函数的this,所以最后拿到对象a里的name

定时器

对于延时函数内部的回调函数的this指向全局对象window

var name = "windowsName";var a = {    name: "Cherry",    fn() {      setTimeout(function (){        console.log(this.name);       },0)    }}a.fn() //windowsName

解析: 首先对象a调用fn函数,然后这里setTimeout里的回调函数是匿名函数,为普通的函数,那么匿名函数中的this指向的就是window

var name = "windowsName";var b={  name: "setTimeoutName"}var a = {    name: "Cherry",    fn() {      setTimeout((function (){        console.log(this.name);       }).bind(b),0)    }}a.fn() //setTimeoutName

解析:首先对象a调用fn函数,然后这里setTimeout里的回调函数是匿名函数,为普通的函数,那么匿名函数中的this指向的就是window,但使用bind改变匿名函数的this指向为对象b,所以最后对象b里的name

构造函数

构造函数中的this指向创建的实例对象,

注意:如果构造函数中返回一个对象,创建时不会有新的实例对象,而是这个返回的对象

function fn(){  this.age = 37;}var a = new fn();console.log(a.age); // 37a.age = 38;console.log(fn); // { this.age = 37; }console.log(a.age); // 38

解析:这里我们通过构造函数创建实例对象a,相当于开辟一个新地方将构造函数内容复制过来,就有了a对象,这时候this指向的就是对象a,我们修改对象a中内容不影响构造函数

点号判断

通过.判断this指向,遵循就近原则

var a = {  age:10,  b: {      age:12,      fn(){          console.log(this.age);       }  }}a.b.fn(); //12

解析:对象a调用对象b的fn函数,fn函数前面有两个.,那么最近的是对象b,所以fn函数的this指向的就是对象b,最后拿到的就是对象b的age

var a = {  age:10,  b: {      age:12,      fn(){          console.log(this.age); //undefined      }  }}var c = {  age:20,}var d = {  age:30,}a.b.fn.bind(c).bind(d)(); //20

解析:对象a调用对象b的fn函数然后使用bind改变this的指向,这时候fn前后前后都有.,不看前面的.,只用看后面的,然后最近的bind改变this指向为c,那么此时fn函数的this指向的就是对象c,拿到的就是对象c的age

练习

function outerFunc() {   console.log(this) // { x: 1 }   function func() {    console.log(this) // Window    }   func()} outerFunc.bind({ x: 1 })()
obj = {  func() {    const arrowFunc = () => {      console.log(this._name)    }    return arrowFunc  },  _name: "obj",}obj.func()() //objfunc = obj.funcfunc()()  //undefinedobj.func.bind({ _name: "newObj" })()() //newObjobj.func.bind()()() //undefinedobj.func.bind({ _name: "bindObj" }).apply({ _name: "applyObj" })() //bindObj

apply、call、bind

使用 apply、call、bind 函数可以改变this的指向,上面this的例子中使用到

区别

thisArg , [ argsArray] call(thisArg, arg1, arg2, ...)

apply和call函数区别在于this后面传入的参数,apply中传的是一个数组,而call中传入的是展开的参数

bind(thisArg[, arg1[, arg2[, ...]]])()

  • 然后bind函数创建的是一个新的函数,需要手动去调用

  • 这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用

读到这里,这篇"javascript的this指向怎么理解"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

函数 对象 指向 就是 参数 内容 箭头 普通 实例 情况 文章 特殊 原则 外层 多种 而是 妥当 一句话 两个 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 互联网科技公司起名 科技平台互联网 上海互联网科技有限公司 金融科技 互联网金融 互联网科技小贷 贷财互联网科技 融势互联网科技 联恩商钥互联网科技有限公司 湖南洣水互联网科技有限公司扣款 恒银科技与互联网金融 彤创互联网科技有限公司 武汉健翔互联网络科技有限公司 银川新华互联网科技学校联系电话 美国互联网科技公司 半导体行业属于互联网高科技类吗 昆明中奇联合互联网科技 中国科技和美国互联网 平安好医生打造互联网科技医疗 东风日产互联网科技公司叫什么 重生之互联网科技帝国 科技金融是不是互联网金融 美国互联网保险保险科技 互联网品科技 重庆互联网络科技 平安科技 互联网 北京互联网络科技有限公司 四川狮子座互联网科技 宝灵互联网科技有限公司 银川新华互联网科技学校招聘
0