this 作为JavaScript中的一个关键字,它的复杂度很高,主要原因是它所处不同场景的代表的指向是不一样的。这里先做一个结论,重要事情说三遍:

this的指向是由上下文环境动态决定的

this的指向是由上下文环境动态决定的

this的指向是由上下文环境动态决定的

我自己是一名从事了多年开发的web前端老程序员,前段时间我花了一个月整理了一份最适合学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以添加下面的QQ群,即可免费获取。

this指向实例场景
关于this的指向的不确定性,主要体现在如下几个应用场景中:

全局环境
普通函数调用
由call/apply/bind函数调用
对象属性方法调用
构造函数调用
箭头函数
全局环境
在全局环境中无论是否是严格模式,this 均指向全局对象,例如浏览器端的 window

// 在浏览器中, window 对象同时也是全局对象:```javascript
console.log(this === window); // truea = 37;
console.log(window.a); // 37this.b = "MDN";
console.log(window.b)  // "MDN"
console.log(b)         // "MDN"

普通函数调用
当普通的函数,直接调用的时候,一般来说分两种情况:严格模式绑定到 undefined
非严格模式绑定到全局对象 window```javascript
function foo(){console.log(this);
}
function bar(){"use strict"; console.log(this);
}
foo() // window
bar() // undefined

call/apply/bind函数调用
call/apply 这两个函数对象到方法能立即执行某个函数,并且讲函数中的this绑定到你提供到对象上去

bind 方法永久的绑定函数中的this到指定对象上,并返回一个新函数,将来这个函数无论怎么调用都可以

function foo(){console.log(this);
}
function bar(){console.log(this);
}
foo.call({name:'小米'}); // {name: "小米"}const bar1 = bar.bind({num:123})
bar1() // {num: 123}

对象属性方法调用
作为对象属性方法调用,都指向前面调用函数都那个对象。当然有的时候会出现各种变种或者干扰的面试题

const student = {name: "tom",fn: function () {return this;},
};
console.log(student.fn() === student);

构造函数调用或者类上下文
构造函数作为JavaScript创建对象的那只大母鸡(实际上类是构造函数的语法糖),通常程序界有个段子叫做new 一个对象,谁还敢说程序员(媛)没有对象的,这种方式调用this指向的是你new出来的那个对象实例本身:

function Person(name){console.log(this);this.name = name
}const p = new Person('tom')
console.log(p);

箭头函数中的this
箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

var obj = {name: "tom",foo() {setTimeout(() => {console.log(this);}, 1000);},
};obj.foo() // obj

面试题
常见面试题有: 1、手写bind函数

Function.prototype.mybind = function (ctx, ...args) {const fn = this;return function () {fn.apply(ctx, args);};
};function foo(x, y) {console.log(this, x, y);
}const foo1 = foo.mybind({ name: "zhangsan" }, 10, 20);
foo1();

2、new 操作符调用构造函数,具体做了什么?

创建一个新的对象;
将构造函数的 this 指向这个新对象;
为这个对象添加属性、方法等;
最终返回新对象。

JavaScript中this的指向问题及面试题你掌握了吗?相关推荐

  1. JAVAscript中的this指向和this指向的修改

    JAVAscript中的this指向和this指向的修改 this 关键字 一般在函数中使用,表示哪个对象执行了当前函数. 每一个函数内部都有一个关键字是 this . 函数内部的 this 只和函数 ...

  2. $.ligerdialog.open中确定按钮加事件_彻底搞懂JavaScript中的this指向问题

    JavaScript中的this是让很多开发者头疼的地方,而this关键字又是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 想要理解this,你可以先记住以下两点: ...

  3. JavaScript中this的指向问题

    this是面向对象语言中一个重要的关键字,理解并掌握该关键字的使用对于我们代码的健壮性及优美性至关重要.而javascript的this又有区别于Java.C#等纯面向对象的语言,这使得this更加扑 ...

  4. 理解JavaScript中this的指向详解

    this的定义和理解: this是JavaScript语言的一个关键字,它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内使用. 1.this和执行环境对象有关,和函数的声明无关. var ...

  5. JavaScript中this的指向

    JavaScript之this指向问题 js中的this指向问题一直不是很清楚,看了coderwhy老师的文章后特此记录一下. this在全局作用域下使用 this在全局作用域下指向的就是window ...

  6. JavaScript中的 this指向问题

    以下文章均已附上原文链接 ,侵删 文章一:vue中的this指向问题 vue中的this指向问题_JingG459的博客-CSDN博客_vue中this指向问题 最近写项目遇到很多this指向的问题, ...

  7. 38 JavaScript中的this指向问题

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.函数内this指向问题 函数内部的this指向是当我们调用函数的时候确定的.调用方式的 ...

  8. javascript中关于this指向问题详解

      前  言 LiuDaP 在前端的学习中,我们必然要用到js,js可以说是前端必不可少的的东西.在学习js的过程中,我们会经常用到this这个东西,而this的指向问题就变得尤为重要.今天正好有空闲 ...

  9. JavaScript中this指针指向的彻底理解

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 1 va ...

最新文章

  1. 知乎热议:国家何时整治程序员的高薪现象?网友:用命和头发换的钱都被人眼红!...
  2. 如何通过简化标题来提升核心关键词排名?
  3. 索引节点(inode)爆满问题处理
  4. Mysql基础运维及复制架构——实验文档
  5. 随笔汇总_索取资料请进入
  6. react项目中的参数解构_重构复杂的React组件:编写高效且可读组件的5个最佳实践...
  7. Android 中.aar文件生成方法与用法
  8. 关闭oracle的几种方法,Oracle数据库的几种启动和关闭方式 | 旺旺知识库
  9. 基于 Kata Containers 与 iSulad 的云容器实践解析
  10. infer的用法_imply和infer的用法区别:阅读理解题里频繁看到的词汇
  11. 第一篇数模论文——估计出租车的总数
  12. 计算机 蓝牙鼠标卡顿,蓝牙鼠标卡顿、漂移现象的解决方法
  13. 《英语语法新思维 基础版2》读书笔记(一)
  14. Elastic App Search:免费的产品,可提供出色的搜索体验
  15. 常见的行业认证和资质清单介绍
  16. PS设计网页下载使用960栅格系统设计简洁网页
  17. 【环境搭建】机械革命 Z3 Air 双系统 原生Windows10 +Ubuntu 20.04.2.0 LTS 桌面版 配置
  18. 爬取掌阅app免费电子书数据
  19. 新生报到系统_新生报到迎新系统正式开放啦!
  20. 数电 8421码与格雷码的转换

热门文章

  1. Kubernetes学习总结(1)——Kubernetes入门简介
  2. Windows学习总结(8)——DOS窗口查看历史执行过的命令的三种方式
  3. Android学习总结(5)——9个非常有用的Andorid 程序片段
  4. 服务器系统格式,服务器系统编码格式
  5. iOS 开发之几个 Demo 分享网站
  6. 计算本周是几号到几号
  7. 实现putty基于密钥的安全登录
  8. 游侠原创:手机电子商务与社交隐私--网络安全的下一个关注点
  9. 洛谷 P1396 营救
  10. snmp服务没有安全设置项