JavaScript的函数中this的指向
JavaScript的函数中this的指向
JavaScript 语言之所以有 this 的设计,跟内存里面的数据结构有关系。
以下例子来简单描述this在不同情况下所指向的对象。
var obj = {aa: function(){console.log(this.num)},num: 5
};var aa = obj.aa;
var num = 10;obj.aa(); // 5
aa(); // 10
对于以上代码,obj.aa和aa都是指向同一个函数,但其执行输出的结果却是大不相同,其原因是他们所指向的函数在内存中是独立保存的。
var obj = {aa: 20};
上面代码所展示的是将一个对象aa的地址丢给了obj,也就是说obj指向的是aa,通过obj拿到内存地址,读取aa对象,返回aa的属性,而aa属性中的值为20。

注意:aa属性的值保存在aa对象的value属性里面。
而如果value属性中所存的不是固定的数值,而是一个函数,则存的是函数的地址(因为函数在内存中是另外的独立存在)。

var obj = {aa: function(){console.log(this.num)},num: 5
};obj.aa(); // 5
对于aa的value属性中存在函数的地址,则在aa中所调用的函数所属的环境存在于obj中,即function中this所指向为obj。

在上面代码所指向的this是obj本身,this.num所输出的值就是obj中num的value属性所带的值。
var obj = {aa: function(){console.log(this.num)},num: 5
};var aa = obj.aa;
var num = 10;obj.aa(); // 5
aa(); // 10
对于obj.aa();调用的函数指向情况和aa();调用的函数指向情况有所不同,obj.aa和上面所阐述的一样,相当于将函数绑定在obj的环境里面。

而对于var aa = obj.aa;来说,变量aa相当于指向函数本身,即aa是一个与function共同存放在全局环境下的函数。

相当于现在的window就好比原来的obj,而现在的obj.aa就好比原来的aa,即将obj.aa看成一个整体,是window环境下的对象,value的值为function的地址,与num:10并其在window这个环境下面,此时this指向的不再是obj,而是window,即this.num调用的是window下的num:10。
相关文章:
JavaScript的函数中this的指向
JavaScript的函数中this的指向 JavaScript 语言之所以有 this 的设计,跟内存里面的数据结构有关系。 以下例子来简单描述this在不同情况下所指向的对象。 var obj {aa: function(){console.log(this.num)},num: 5 };var aa obj.aa; var num 10;obj.aa(); // …...
Caddy 中实现自动 HTTPS
要在 Caddy 中实现自动 HTTPS,您可以按照以下步骤进行操作: 步骤 1:安装 Caddy 首先,您需要安装 Caddy 服务器。您可以从 Caddy 的官方网站(https://caddyserver.com/)下载适用于您的操作系统的最新版本。…...
SK5代理(socks5代理)在网络安全与爬虫应用中的优势与编写指南
一、SK5代理(socks5代理)的基本概念 SK5代理是一种网络代理协议,它允许客户端通过代理服务器与目标服务器进行通信。相较于HTTP代理,SK5代理在传输数据时更加高效且安全,它支持TCP和UDP协议,并且能够实现数…...
【LeetCode-简单】剑指 Offer 06. 从尾到头打印链表(详解)
题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 题目地址:剑指 Offer 06. 从尾到头打印链表 - 力扣(LeetCode) 方法1:栈 思路 题目要求我们将链表的从尾到投打印一…...
【LeetCode】114.二叉树展开为链表
题目 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&…...
DAY3,Qt(完成闹钟的实现,定时器事件处理函数的使用)
1.完成闹钟的实现,到点播报文本框的内容; ---alarm.h---头文件 #ifndef ALARM_H #define ALARM_H#include <QWidget> #include <QTimerEvent> //定时器处理函数类 #include <QTime> //时间类 #include <QPushButton> //按钮…...
TL-ER3220G设置vlan
TL-ER3220G是企业宽带路由器。 自带5个RJ45接口。 其中接口1到接口4都可以接入宽带线路。最多可以并接4路。 本例由接口1接入宽带,默认接口2到接口4组成1个vlan,名称vlan。其中接口5特殊,带宽最大100M。 计划将接口2和接口4组成第一个vlan&…...
PHPWord 实现合并多个word文件
PHPWord 本来想着当调包侠呢,结果翻了一遍文档,没有这种操作支持,阿这😂 GPT 不出意外的一顿胡扯,给👨🦳气的要中风啦 思路 word 也就是docx结尾的文件本质上就是xml字符串, …...
rust持续学习Box::leak
Box就是unique_ptr 这个函数的功能是消费box返回一个全局变量! 写一个函数,想要真的返回全局变量,感觉用这个是个好的做法 fn Foo()->Option<&static mut A> {let a Box::new(A());Some(Box::leak(a)) }这样就能当真拿到这个全…...
通过SSH实现将本地端口反向代理到公网服务器
使用场景 有一台公网服务器,能够对外开放服务进行访问,但是这个公网服务器资源较低,无法运行太多服务 有一台闲置电脑可以全天候开机使用,且配置较好,可以部署多个服务,但是没有公网IP 需求:将…...
Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧
一、Fragment的简单用法 1、制作Fragment 1.1 新建一个布局文件left_fragment.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"ve…...
机器学习 day30(正则化参数λ对模型的影响)
λ对Jcv和Jtrain的影响 假设该模型为四阶多项式当λ很大时,在最小化J的过程中,w会很小且接近0,此时模型f(x)近似于一个常数,所以此时模型欠拟合,Jtrain和Jcv都很大当λ很小时,表示模型几乎没有正则化&…...
图文教程:如何在 3DS Max 中创建3D迷你卡通房屋
推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在本教程中,我们将学习如何创建一个有趣的、低多边形的迷你动画房子,你可以在自己的插图或视频游戏项目中使用它。您将学习的一些技能将包括创建基本的3D形状和基本的建模技术。让我…...
根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片
目录 1,根据UIL下载图片/视频 2,根据URL自动下载图片/视频 3、GUI自动下载想要的图片 ①点击下载按钮,进行挨个下载 ②右击保存进行下载图片 4、图片或视频URL批量放入浏览器页面上 1,根据UIL下载图片/视频 def downForInter…...
HTML <picture> 标签
实例 如何使用 <picture> 标签: <picture><source media="(min-width:650px)" srcset="/i/photo/flower-4.jpg"><source media="(min-width:465px)" srcset="/i/photo/tulip.jpg"><img src="/i/ph…...
力扣天天练--week3-LeetCode75
topic75-9-t443:压缩字符串 题目描述: 给你一个字符数组 chars ,请使用下述算法压缩: 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 : 如果这一组长度为 1 ,则将字符追加到 s 中。 否则,需…...
5.2 方法的定义和调用
5.2 方法的定义和调用 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 一、方法的定义 方法包含一个方法头和一个方法体 修饰符 返回值类型 方法名 (参数类…...
Linux基础以及常用命令
目录 1 Linux简介1.1 不同应用领域的主流操作系统1.2 Linux系统版本1.3 Linux安装1.3.1 安装VMWare1.3.2 安装CentOS镜像1.3.3 网卡设置1.3.4 安装SSH连接工具1.3.5 Linux和Windows目录结构对比 2 Linux常用命令2.0 常用命令(ls,pwd,cd&#…...
echarts 折线图上只显示某一个点值
<template> <div> <!-- 数据来源 --> <div class"echarts" ref"echartsRef"></div> </div> </template> <script setup langts name"reconciled"> import { ref } from "vue"; im…...
1、传统锁回顾(Jvm本地锁,MySQL悲观锁、乐观锁)
目录 1.1 从减库存聊起1.2 环境准备1.3 简单实现减库存1.4 演示超卖现象1.5 jvm锁1.6 三种情况导致Jvm本地锁失效1、多例模式下,Jvm本地锁失效2、Spring的事务导致Jvm本地锁失效3、集群部署导致Jvm本地锁失效 1.7 mysql锁演示1.7.1、一个sql1.7.2、悲观锁1.7.3、乐观…...
Kerberos身份认证原理与实战排错指南
1. 为什么今天还要花时间搞懂 Kerberos?——一个被低估的“老协议”正在悄悄支撑着你的日常你每天登录公司内网查邮件、访问财务系统提交报销、用 Jenkins 构建代码、甚至在 Windows 域环境中打开一台同事的共享文件夹……这些看似顺滑的操作背后,大概率…...
2026在线测评系统十大量表对比:信效度与场景全解析
【30s 核心摘要】2026 年在线测评成人才管理刚需,信效度与场景适配成选型核心。本文聚焦十大量表,从信度、效度、适配场景等维度深度对比,重点解析问卷星、北森、金数据等主流平台的量表能力与落地效果,为企业、高校及机构提供科学…...
ARM指令追踪技术及TRCVICTLR寄存器详解
1. ARM指令追踪技术概述在嵌入式系统开发和调试过程中,指令追踪(Instruction Trace)是一项至关重要的技术。它通过硬件机制记录处理器的执行流程,为开发者提供程序运行的完整轨迹。ARM架构从v7开始引入嵌入式跟踪宏单元࿰…...
智能检索新范式,让AIAgent自主决策,提升RAG效率100%!
市面上的 RAG 系统,不管叫什么名字,本质上只有两种做法: 第一种,一次性检索。把用户的 query 向量化,从语料库里捞出 Top-K 个文档片段,拼成一个大 prompt 塞给模型。GraphRAG、HippoRAG、LightRAG 都属于…...
力扣HOT100(30)两两交换链表中的节点
链表的交换要注意 “链表不断链”。前驱和后继都要连着迭代法(必学死磕!O (n) 时间,O (1) 空间)1. 为什么必须用虚拟头节点?因为交换后链表的头节点会变! 比如示例 1 中,原来的头是 1࿰…...
长期使用Token Plan套餐在项目开发中的成本观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Token Plan套餐在项目开发中的成本观察 在AI驱动的项目开发中,成本控制与预算管理是团队负责人必须面对的现实…...
Unity iOS构建报错SDK version is 0的根因与精准修复
1. 这个报错不是Unity在“发脾气”,而是工程配置在“装死”刚接手一个老项目,打开Unity编辑器,点Build Settings准备打包iOS,结果弹出一行红字:“SDK version is 0, cannot build”。我第一反应是——这什么鬼…...
Qri高级功能:如何使用JSON Schema验证和描述数据集结构
Qri高级功能:如何使用JSON Schema验证和描述数据集结构 【免费下载链接】qri youre invited to a data party! 项目地址: https://gitcode.com/gh_mirrors/qr/qri Qri是一个强大的开源数据协作工具,它提供了丰富的功能来帮助用户管理、共享和验证…...
同步带装配工艺要点与损伤防控策略
一、引言在工业精密传动系统中,盖茨同步带凭借高精度、高效率、无滑差的优势,成为自动化设备、精密机床、输送产线的核心传动部件。多数企业在运维中,普遍将同步带异常磨损、断齿、断带等故障归咎于工况恶劣或产品质量问题,却忽略…...
别再手动测模型了!用Simulink Test Manager实现自动化测试(附Excel表格配置详解)
从手动测试到智能验证:Simulink Test Manager全流程自动化实战指南 在模型开发的迭代过程中,工程师们常常陷入"修改-测试-记录"的循环泥潭。每次参数调整后,手动运行模型、记录数据、比对结果不仅消耗大量时间,更可能因…...
