(前端)面试300问之(3)this的指向判断

news/2024/9/20 4:45:39/ 标签: java, 开发语言, 算法, 数据结构, c语言

一、this的相关理解与解读

1、各角度看this。

1)ECMAScript规范:

this 关键字执行为当前执行环境的 ThisBinding。

2)MDN:

In most cases, the value of this is determined by how a function is called.
在绝大多数情况下,函数的调用方式决定了this的值。

3)其实,没必要记这些文邹邹的句子去理解【哎,很多我们懂的词语放在同一个句子里,我们可能就读不懂其意思了】。

我们只需记住一个魔法口诀 ------ “this 永远指向最后调用它的那个对象” 就能理解 this 的指向问题。

二、this指向的判断。

1、this指向的判断流程图:


判断this指向.png

2、具体的例子:

1)普通函数 && 通过new关键字进行创建的:
class O {constructor(name) {this.name = name;}getName(){console.log(this);}
}let o = new O('码农三少');
o.getName(); // {name: "码农三少"}
2)普通函数 && !通过new关键字进行创建 && 函数调用中使用上下文对象:
function fn() {console.log(this);
}let o = {name: '码农三少',fn: fn
}window.fn();    // 上下文对象调用, 等价于直接调用 fn()。 {window: Window, self: Window, document: document, name: "", location: Location, ...}
o.fn();       // 上下文对象调用。 {name: "码农三少", fn: ƒ}
3)普通函数 && !通过new关键字进行创建 && !函数调用中使用上下文对象:
function fn() {console.log(this);
}let o = {name: '码农三少',fn: fn
}
let newFn = o.fn;
newFn(); // 等同于 window.fn(); 和 fn(); 。 {window: Window, self: Window, document: document, name: "", location: Location, ...}
4)箭头函数(指向它外层普通函数的this指向):
let o = {name: '码农三少',fn() {return () => {console.log(this)}}
}let newFn = o.fn();
newFn(); // 这2行等价于 o.fn()(); 。{name: "码农三少", fn: ƒ}
5)使用了特殊函数(如bind、apply、call):
function fn() {console.log(this);
}let bindObj = {name: '我是 bindObj , By 码农三少'
};let applyObj = {name: '我是 applyObj , By 码农三少'
};let callObj = {name: '我是 callObj , By 码农三少'
};fn(); // 等价于 window.fn(); Window {window: Window, self: Window, document: document, name: "", location: Location, ...}
fn.bind(bindObj)(); // {name: "我是 bindObj , By 码农三少"}
fn.apply(applyObj); // {name: "我是 applyObj , By 码农三少"}
fn.call(callObj); // {name: "我是 callObj , By 码农三少"}

喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.ppmy.cn/news/1520640.html

相关文章

嵌入式硬件-ARM处理器架构,CPU,SOC片上系统处理器

多进程空间内部分布图:注意:创建线程实际使用堆区空间,栈区独立 ARM处理器架构: 基于ARM920T架构的CPU:以下为哈佛结构 ALU:算数运算器 R0~R12:寄存器 PC:程序计数器,默认为0,做自加运算&#x…

kafka单条消息过大发送失败

一、背景 生产环境中使用kafka作为消息队列,生产者发送消息失败,查询报错日志,得到如下输出: Caused by: org.springframework.kafka.KafkaException: Send failed; nested exception is org.apache.kafka.common.errors.RecordT…

JSON格式化?超简单!

JSON格式化 是指将JSON(JavaScript Object Notation)数据转换成一种更易读、结构化的格式。 在以下场景中,可能需要进行JSON格式化: 调试和开发:在开发过程中,开发人员经常需要查看和解析JSON数据。通过…

基于深度学习的遥感图像分类识别系统,使用PyTorch框架实现

取5个场景 [海滩, 灌木丛, 沙漠, 森林, 草地] 划分数据集 train:val:test 7:2:1 环境依赖 pytorch1.1 or 1.0 tensorboard1.8 tensorboardX pillow 注意调低batch_size参数特别是像我这样的渣渣显卡 使用方法 只需要指…

如何快速采集淘宝商品数据?

无论是谁,如果单凭人工的方式去收集淘宝、天猫等平台的商品数据信息,工作量是巨大的,如果借助有采集软件的第三方公司操作,则可实现对大数据的轻松掌握,但是外包给第三方公司需要支付一定的费用,包含技术费…

Canvas 在 微信小程序-uni-APP 和 H5 中的使用差异

Canvas 是一个强大的绘图工具,无论是在 Web 开发还是跨平台应用开发中都有广泛应用。然而,在 uni-APP 和传统 H5 环境中使用 Canvas 时,存在一些重要的差异。本文将深入探讨这些差异,帮助开发者在不同平台上更好地使用 Canvas。 1. API 差异 H5 环境 在 H5 环境中,我们使用标…

十四、低空安全综合管理服务平台建设方案

1、系统背景 由于低空安全研究关系到国家战略安全保障,世界各国相继开展了相关法律法规建设,以及一系列的理论与技术保障研究。为了保障低空空域安全,需推动建立各省级安全管理平台,做好与企业级监控服务平台的管理衔接和数据共享,强化本区域内民用无人机的安全监管工作;…

vue大屏可视化:4k带鱼屏、4k、2k、1920*1080、笔记本 全适配方案

本方案采用的是媒体查询的方法来实现的 css媒体查询书写(可按照自己需求新增)不同尺寸下显示不同的文字大小图片大小等: // 4K 带鱼屏 media screen and (max-width: 3840px) and (max-height: 1080px) {} // 4K media screen and (max-widt…

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层?⭐️⭐️⭐️3. 各层都有那些协议?⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码?⭐️⭐️⭐️2. 从输入URL到页面展示…

基于 web教学管理系统设计与实现

3 总体设计 3.1 系统软件体系结构 系统采用B/S结构,统一管理数据库和Web服务器。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构,第一…

安装Selenium进行web⾃动化测试

目录 驱动安装驱动管理工具selenium安装selenium驱动浏览器的⼯作原理自动化测试常⽤函数1. 元素定位1.1. find_element 的基本用法1.2. 常见的 find_element 定位方式1.3. find_element 的使用注意事项1.4. find_element 的进阶用法 2. 操作测试对象3. 窗口操作4. 弹窗处理5. …

Hive整合MySQL

目录 Hive整合MySQL 安装MySQL 1)上传MySQL安装包以及MySQL驱动jar包 2)解压MySQL安装包 3)卸载系统自带的mariadb 4)安装MySQL依赖 5)安装mysql-client 6)安装mysql-server 7)启动MySQ…

Maven与Gradle差异

作为Java 开发者,你平时用 Maven 还是 Gradle? 我一直用的都是 Maven,但是前几天做了一个小项目,用的是 Gradle,因工作需要就去了解了Gradle的相关信息。 直到看到 Spring 和 Spring Boot 都从 Maven 切换到 Gradle了…

IPSec 参数

IPSec抗重放: 抗重放窗口: ChatGPT 说: ChatGPT 在 IPSec(Internet Protocol Security)中,“抗重放”机制是一种用于防止重放攻击的安全功能。重放攻击是一种攻击形式,攻击者捕获合法的网络通…

大数据技术之Flume 参数调优(12)

目录 1. Source 调优 增加 Source 个数 调整 batchSize 参数 2. Channel 调优 选择 Channel 类型 配置 dataDirs 参数 设置 Capacity 和 transactionCapacity 参数 3. Sink 调优 增加 Sink 个数 调整 batchSize 参数 4. Flume 的事务机制 事务处理 5. 数据丢失与重…

Linux中的编译器gcc/g++

目录 一、gcc与g的区别 1.gcc编译器使用 2.g编译器使用 二、gcc/g编译器编译源文件过程 1.预处理 2.编译 3.汇编 4.链接 三、静态库和动态库 1.库中的头文件作用 2.静态库 3.动态库 四、gcc编译器的一些选项命令 一、gcc与g的区别 gcc用于编译C语言代码&#xff…

Power Automate向Power Apps传Table数据

Flow返回查询的数据表并返回Apps 场景介绍代码开发Power Automate开发数据库Power Automate调用存储过程 Power Apps开发代码开发 测试 场景介绍 我们通常会使用Flow 查询数据表然后Apps端将表中的数据显示出来,我们怎么来传呢,它自带的response for Po…

揭秘GLM-130B爆火秘诀:颠覆性自回归填空和二维位置编码的训练黑科技

GLM(通用语言模型)的训练过程确实复杂,尤其是涉及到其独特的预训练目标和架构调整。让我来详细解释一下GLM的训练过程。 1. 模型架构简介 GLM-130B 是基于 Transformer 架构的双语(中文和英文)语言模型,拥…

仕考网:应届生考公务员的优势

应届生报考公职存在显著优势,建议大家充分利用这一身份: 1.政策优惠 在不缴纳社保的前提下,应届毕业生可在两年内利用此身份参与各类公职考试。国考及省考中,大量岗位专为应届生设置,其中国考约有三分之一的职位仅限…

解除本地Git仓库与远程仓库关联

清除Git凭据缓存 Git在本地会缓存你的认证信息,以便在后续操作中自动使用。你可以通过以下步骤来清除这些缓存的凭据: 对于Windows用户: 打开“控制面板”并选择“凭据管理器”(Credential Manager)。在“Windows凭据…