javascript class 方法的this指向问题
踩坑记录
JavaScript 的 class 里面有两种定义方法的方式
- 普通函数(fun1)
- 箭头函数(fun2)
class Obj {
func1() {
// write some code...
}
func2 = () => {
// write some code...
}
}
其中使用普通函数定义的方法,是保存在原型链上,被所有实例所共享
而用箭头函数定义的方法,是作为变量保存在每一个实例中

那么这两种定义方法还有什么不同嘛?
那就是this指向的问题!
如果我们平时只向下方代码这样使用方法,那么这两种不同的定义方法,自然没有区别
const obj1 = new Obj()
obj1.fun1()
obj1.fun2()
但是一旦你把这个类里面的方法传递给了另一个变量,一切就变得不一样起来了~
由于this是取决于运行时的上下文环境的
所以如果用普通函数定义的方法,被传递给了其他环境的变量
然后调用该方法,所打印的this应该是该方法被调用环境的this
而箭头函数由于没有this,或者说它的this在创建时就被绑定了
所以你传递箭头函数,它的this指向就会一直是原环境。
javascript class 方法的this指向问题的更多相关文章
- 【译】你应该了解的JavaScript数组方法
让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...
- es6 javascript对象方法Object.assign()
es6 javascript对象方法Object.assign() 2016年12月01日 16:42:34 阅读数:38583 1 基本用法 Object.assign方法用于对象的合并,将源对象 ...
- 简要谈谈javascript bind 方法
最近去参加了场面试,跟面试官聊了很多JS基础上的东西,其中有个问题是谈谈对apply.call.bind的理解和区别.顿时一愣,apply.call我知道,经常用的东西,bind是什么鬼!!!好像见过 ...
- javascript中几种this指向问题
javascript中几种this指向问题 首先必须要说的是,this 永远指向函数运行时所在的对象,而不是函数被创建时所在的对象. (1).作为函数名调用 函数作为全局对象调用,this指向 ...
- JavaScript 你真的了解this指向吗
JavaScript 你真的了解this指向吗 前言 终于开始写this指向了,相信这对很多JavaScript的学习者来说是一个非常恐怖的环节,个人认为也算是JavaScript中最难理解的一个知识 ...
- JavaScript中函数的this指向!
JavaScript的this的指向问题! 这是我自己敲的, 报错! <button>点击查看绑定事件的this指向!</button> <script> // 函 ...
- JavaScript中的this对象指向理解
在JavaScript中,this不是固定不变的,它的指向取决于上下文环境,一般的,认为this指向使用它时所在的对象.主要有以下几类指向: 在方法中,this 表示该方法所属的对象. 如果单独使用, ...
- JavaScript - reduce方法,reduceRight方法 (Array)
JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...
- JavaScript slice() 方法
JavaScript slice() 方法 JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...
- JavaScript toLocaleString() 方法
JavaScript toLocaleString() 方法 JavaScript Array 对象 定义和用法 把数组转换为本地字符串. 语法 arrayObject.toLocaleString( ...
随机推荐
- 函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化揭秘
简介:本文将介绍借助函数计算下一代 IaaS 底座神龙裸金属和安全容器,进一步降低绝对延迟且能够大幅降低冷启动频率. 作者:修踪 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署 ...
- [GPT] 怎么查看我的 macbook 有多少显存
您可以按照以下步骤查看您MacBook的显存大小: 点击屏幕左上角的苹果图标,选择"关于本机". 在弹出的窗口中,点击"系统报告". 在左侧栏中选择&quo ...
- dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门
本文将告诉大家如何通过 Vortice 使用 D2D 的 CommandList 功能 本文属于 DirectX 系列博客,更多 DirectX 和 D2D 以及 Vortice 库的博客,请参阅我的 ...
- RT-Thead移植时缺少SystemCoreClockUpdate函数
一.问题 在移植 RT-Thead 时,需要获取mcu当前的 HCLK 时钟频率来设置滴答时钟,而我使用的库函数中刚好缺少SystemCoreClockUpdate函数. 我之前在RT-Thread移 ...
- Solution Set - 组合计数
CF40E Number Table Link&Submission. 显然 \(n,m\) 奇偶性不同时无解.奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位 ...
- 03 Xpath lxml库的安装和使用
Python lxml库的安装和使用 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 Xpath 表达式提供了良好的支持,因此能够了高效地解析 HTML/XML 文 ...
- go 操作 Excel
文档地址: https://xuri.me/excelize/zh-hans/ package main import ( "fmt" "github.com/xuri/ ...
- Rails向数据库添加新字段和修改字段
目录 添加字段 控制台上执行下面的命令 会生成文件db/migrate/20210529131328_add_column_to_black_ips.rb 执行迁移 执行结果 修改字段 添加迁移文件 ...
- docker-compse 安装nginx 配置目录挂载
一.新建一个启动服务的目录 mkdir /usr/local/docker/compose cd /usr/local/docker/compose 二.新建文件docker-compose.yml ...
- vue3.0 用vue ui 新建项目
安装步骤: 1.打开安装界面 打开cmd vue ui 2.选择要安装的位置 3.设置详情 4.设置预设 5.设置功能 选择Babel / Router / Linter/Formatter / 使用 ...