您现在的位置是:首页 > 正文

class箭头函数和普通函数的this

2024-02-01 01:26:19阅读 1
class Animal{
 constructor() {
    this.name = 'cat'
 }
 speak() {
    console.log(this.name)
  }
  eat = () => {
    console.log(this.name)
  }
}
const n = new Animal()
n.speak()
n.eat() 
const a = n.speak
const b = n.eat
b() 
a()  
n.speak() // cat
n.eat() // cat

小结:
class中的方法如果是普通函数方法,该方法会绑定在构造函数的原型上;但是如果方式是箭头函数方法,该方法会绑定在构造函数上。通过上述方式调用class中的方法,无论是箭头函数方法还是普通函数方法,方法中的this都指向实例对象。

const a = n.speak
const b = n.eat
b() // cat
a() 
  1. 通过引用来调用箭头函数方法,方法中的this依然指向创建的实例对象。
    原因:箭头函数中的this,只和定义改箭头函数的位置有关系,即,箭头函数中的this始终是该箭头函数所在作用域中的this。而箭头函数所在的作用域中的this指向foo实例对象。
  2. 通过引用调用普通函数方法,方法中的this会指向undefined。
    原因:因为普通函数中的this是动态绑定的,始终指向函数的执行环境,上面的例子中在全局环境中调用speak方法,但是this确是undefined而不是window。原因在于class声明和class表达式中会默认使用严格模式。

网站文章

  • 阻抗匹配的史密斯图

    阻抗匹配的史密斯图

    一、史密斯图:由于反射系数,若用 0~阻抗成分和 ~电抗成分之和表示阻抗,则在半径为1的圆中都能表示出来。史密斯图就是用反射系数取代阻抗表示形式(),则可以用0~1的大小(幅值)和-180°~+180°的相位组合表示对应的阻抗量。二、史密斯图描绘阻抗:...

    2024-02-01 01:26:12
  • lightoj 1038 Race to 1 Again 期望

    dp[i]表示从i到1的期望次数。dp[i] = ∑dp[j] / cnt + 1。(cnt为所有因子数量,含1和i)但是∑dp[j]中有一个dp[i]。把dp[i]都移项到左侧,得dp[i] = (∑dp[j] - dp[i] + cnt) / (cnt - 1)。提前预处理出来,O(1)回答即可。 1 #include <cstdio> 2 #includ...

    2024-02-01 01:25:46
  • MyBatis-Plus代码生成器(新)使用

    MyBatis-Plus代码生成器(新)使用

    如何一键实现springboot基础代码完全实现,一篇文章给你参考,提高开发效率!

    2024-02-01 01:25:40
  • FreeRTOS任务运行时间查看

    FreeRTOS任务运行时间查看

    FreeRTOS任务运行时间检测

    2024-02-01 01:25:33
  • [附源码]java毕业设计学生实习管理系统

    [附源码]java毕业设计学生实习管理系统

    项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe...

    2024-02-01 01:25:06
  • 年薪50w+的阿里p7专家,顶尖的技术人才,只因做到了这几点 热门推荐

    年薪50w+的阿里p7专家,顶尖的技术人才,只因做到了这几点 热门推荐

    年薪50w+的阿里p7专家,顶尖的技术人才,只因做到了这几点置顶2018年03月11日 21:51:38阅读数:3544最近部门招聘,很多工程师,包括我在内都参与了内推和面试的过程,经过这次招聘,我发...

    2024-02-01 01:24:59
  • 4.Nacos系列之权限管理

    4.Nacos系列之权限管理

    本文介绍nacos的权限管理模块:基于RBAC(Role-Based Access Control)权限模型,即基于角色的权限控制。后续笔者会在公众号算法小生专门开设一个系列,从Vue前端到后端一整套流程实现RBAC权限系统与大家分享。

    2024-02-01 01:24:51
  • react实现触底加载

    react实现触底加载

    用到了 antd-mobile第三方库中的InfiniteScroll 无限滚动。

    2024-02-01 01:24:23
  • 解决plsql中文乱码问题 热门推荐

    原因:本机没有配置数据库字符集环境变量,或是与数据库字符集不一致。 步骤一:在plsql中执行 select userenv(&#39;language&#39;) from dual; 或是执 se...

    2024-02-01 01:24:17
  • Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)复现

    Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)复现

    1.通过&quot;docker-compose build&quot;和&quot;docker-compose up -d&quot;拉取环境 刚开始直接敲命令docker-compose bui...

    2024-02-01 01:24:10