1. 初识this

    this => 永远表示某个对象,但写在不同的地方,它表示不同的对象

  2. 全局下的this:

    window => 浏览器环境下的全局对象

    console.log(this) => 全局作用域内的this指向window

  3. 默认情况的this:

    this一般只用在函数内部:函数内的this就是找到这个函数的所有者

	let obj = {
name:'你好程序猿',
fn(){
// 这里的this指向obj,fn属于obj
console.log(this.name);
}
} obj.fn();

函数内的this指向这个函数的所有者,是因为函数的所有者才有这个函数,一般也是由所有者来调用该函数

那能不能认为谁拥有这个函数,this就指向谁呢?

通常情况确实如此,但这样并不不严谨,我们继续往下看

  1. this严格的定义

    this => 哪个对象调用this所在的函数,this就指向这个对象.(严谨)

那怎么样算调用?

函数一定是需要通过某个对象调用的

  • 默认情况,对象只能调用自己的方法,不能调用别的对象的方法
  • 默认情况,函数的所有者就是函数的调用者

    所以找this的指向,就是看看这个调用的前面是哪个对象,this就指向这个对象
  1. 确定this指向步骤(默认情况)
  • a:this写在哪个函数声明内(写在哪个函数的{}里,先找到this写在哪)
  • b:这个函数的调用在哪里 => 关键
  • c:看看这个调用的前面是哪个对象,this就指向这个对象

  1. 确定this指向(特殊情况)

    js是如何让一个对象调用不属于它的方法呢

    call方法 => 临时改变一次this指向

    apply方法 => 临时改变一次this指向,与call的区别是传递的参数格式为数组

    bind方法 => 绑定this => 永久改变this指向
了解详细情况,请关注后面的call,apply,bind解析
  1. 确定箭头函数this指向

    有箭头函数,不要分析箭头函数的调用,分析箭头函数的父函数的调用
了解详细情况,请关注后面的箭头函数的this指向解析
  1. 确定new构造函数this指向

    有new,this指向实例
了解详细情况,请关注后面的new构造函数this指向解析

关于this的解析:看了就懂,忘记了随时回来看的更多相关文章

  1. 深度剖析HashMap的数据存储实现原理(看完必懂篇)

    深度剖析HashMap的数据存储实现原理(看完必懂篇) 具体的原理分析可以参考一下两篇文章,有透彻的分析! 参考资料: 1. https://www.jianshu.com/p/17177c12f84 ...

  2. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  3. [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)

    Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528   ...

  4. 2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文

    2018前端面试总结,看完弄懂,工资少说加3K | 掘金技术征文:https://juejin.im/post/5b94d8965188255c5a0cdc02

  5. Java进阶专题(二十六) 将近2万字的Dubbo原理解析,彻底搞懂dubbo

    前言 ​ 前面我们研究了RPC的原理,市面上有很多基于RPC思想实现的框架,比如有Dubbo.今天就从Dubbo的SPI机制.服务注册与发现源码及网络通信过程去深入剖析下Dubbo. Dubbo架构 ...

  6. java回调函数,看完就懂

    java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...

  7. 解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真

    通常我们拿到某个ECU的通信矩阵数据库文件,.dbc后缀名的文件. 直接使用CANdb++ Editor打开,可以很直观的读懂信号矩阵的信息,例如下图: 现在要把上图呈现的信号从.dbc文件中解析出来 ...

  8. Python迭代和解析(5):搞懂生成器和yield机制

    解析.迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html 何为生成器 生成器的wiki页:https://en.wikipedia ...

  9. 一篇你看了就懂的DNS详解

    DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP. 通过域名,最终得到该域名对应的IP地址 ...

随机推荐

  1. 爬虫-使用BeautifulSoup4(bs4)解析html数据

    Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. 一.安装 sudo pip3 install beautifulsoup4 二.使 ...

  2. 前端 | vxe-table 翻页保留复选框状态

    0 前言 在前端开发过程中时常会遇到表格相关的显示与处理.组件库通常都会提供表格组件,对于展示.简单操作这些常用功能通常也够用:但如果需要更多的定制或进行比较复杂的操作,组件库自带的组件可能会捉襟见肘 ...

  3. .NET 6 Preview 3 发布

    前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来自于底层,一起来看看都有什么新特性和改进吧. 库改进 新增值类型作为字典值时更快的处理方法 .NET 6 Previ ...

  4. 13个精选的React JS框架

    如果你正在使用 React.js 或 React Native 创建用户界面,可以试一试本文推荐的这些框架. React.js 和 React Native 是流行的用户界面(UI)开发平台,且都是开 ...

  5. Python的flask接收前台的ajax的post数据和get数据

    ajax向后台发送数据: ①post方式 ajax: @app.route("/find_worldByName",methods=['POST']) type:'post', d ...

  6. Array.prototype.fill 填充值被复用的问题

    考察如下示例代码: // 创建二维数组 const arr = Array(2).fill([]); // 操作第一个元素 arr[0].push(1); // 结果是操作了所有数组 console. ...

  7. spark未授权RCE漏洞

    Spark简介 spark是一个实现快速通用的集群计算平台.它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的.低延迟的数据分析应用程序.它扩展了广泛使用的MapRedu ...

  8. CLion 2020.1.2 激活

    1 下载 官网. 2 运行 解压安装并运行,选择Evaluate. 3 激活 来这里下载jar补丁,拖进去即可.

  9. Score UVA - 1585

    ​ There is an objective test result such as "OOXXOXXOOO". An 'O' means a correct answer of ...

  10. 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流

    在一般的互联网应用中限流是一个比较常见的场景,也有很多常见的方式可以实现对应用的限流比如通过令牌桶通过滑动窗口等等方式都可以实现,也可以在整个请求流程中进行限流比如客户端限流就是在客户端通过随机数直接 ...