当前位置: 首页 > news >正文

js中this指向问题

在js中,this关键字的指向是一个比较重要的概念,它的值取决于函数的调用方式。

全局状态下

//全局状态下 this指向windowsconsole.log("this", this);console.log("this===windows", this === window);

在函数中

 // 在函数中 this指向windowsfunction text() {console.log("在函数中this", this);}text();

函数作为对象的方法被调用 

   // 函数作为对象的方法被调用 this指向该方法的对象const info = {name: "info",infoFunc: function () {console.log("info对象中this指向该对象", this, this.name);},};

 

构造函数中 

    // 构造函数中 this指向新创建的对象function Person(name) {this.name = name;console.log("构造函数", this);}const person = new Person("zs");

 

 函数嵌套函数,使用变量存储this,箭头函数

  const info2 = {name: "alice",// 函数嵌套函数 this 指向windowsinfo2Fun2: function () {function fun2() {console.log("函数嵌套函数中", this);}fun2();},info2Fun3: function () {//为了解决函数嵌套函数this指向windows的问题//将当前方法中的 this 值(也就是 info2 对象)存储到 _this 变量中var _this = this;function fun3() {console.log("使用_this存储this", _this);}fun3();},// 使用箭头函数也可以解决函数嵌套函数 info2Fun4: function () {// 箭头函数没有this,向上寻找则为info2对象的thisconst fun2 = () => {console.log("info2Func2方法中的fun2函数", this);};fun2();},};info2.info2Fun2();info2.info2Fun3();info2.info2Fun4();

 

 

显示修改this指向

在 JavaScript 中,apply、call 和 bind 是 Function 对象的三个重要方法,它们主要用于改变函数内部 this 的指向,同时还能在调用函数时传递参数

call

   function greet(message) {console.log(`${message}, ${this.name}`);}const person2 = { name: "John" };greet(person2, "Hello1111");greet.call(person2, "Hello");

不加call为什么是[object Object], 

普通函数调用的时候 this指向全局对象,在这个调用里面,把person2作为参数传递给greet函数,但函数内部不指向perosn2。greet函数只接收一个参数,当调用的时候,message被赋值为perosn2,第二个参数就被忽略了。全局对象的name为空字符串,同时message是person2对象,对象默认的字符串表示形式是 [object Object]  所以打印结果为[object Object]

  console.log('window.name',window.name,typeof(window.name));

 

加call

call方法第一个参数就是要绑定给this的对象,后续参数依次传递给被调用的函数,当调用的时候,this被显示地绑定到person2对象上,message被赋值为Hello

call方法支持传入多个参数,以逗号隔开

     function greet(message,message2) {console.log(`${message}, ${this.name},${message2}`);}const person2 = { name: "John" };greet.call(person2, "Hello","aaaaa");

 

apply 

apply与call类似,第一个参数都是指定函数执行时this的值,第二个参数也是传递数据用的,区别是它是以数组元素的形式传入的,多个参数则传入多个元素。当不确定参数数量的时候使用apply更方便。

   greet.apply(person2,['BBBBBBBB','CCCCC'])

 

bind

bind与call和aplly类似,第一个参数也是指定函数执行时this的值,区别是call和apply会立即执行,而bind会返回一个新的函数供后续使用

   const greet2=greet.bind(person2,'DDDDDD','EEEEE');greet2();

 

   const greet3=greet.bind(person2,'FFFFF','GGGGGG');greet3();

 

vue中的this

选项式API

在生命周期,methods,computed,watch中,this都指向组件实例

<template><div class="box"><div @click="addNum">A:{{ num }}</div><div @click="addNum2">B:{{ num }}</div><div @click="addNum2">C:{{ num2}}</div></div>
</template><script>
export default {data(){return {num:10}},computed:{num2(){console.log('computed',this);return this.num;}},watch:{num(newvalue,oldvalue){console.log('watch',this);      console.log(newvalue,oldvalue);}},created(){console.log('created中this',this);},mounted(){console.log('mounted中this',this);},methods:{addNum(){console.log('methods',this);this.num++;},addNum2:()=>{console.log('箭头函数',this);}}}
</script>

组合式API

组合式 API 鼓励将逻辑封装在函数中,这些函数可以在setup函数中调用。通过这种方式,逻辑更加模块化,作用域更加清晰。不再依赖this来访问实例的属性和方法,而是直接从返回的对象中解构出所需的变量和函数。

END 

 

相关文章:

js中this指向问题

在js中&#xff0c;this关键字的指向是一个比较重要的概念&#xff0c;它的值取决于函数的调用方式。 全局状态下 //全局状态下 this指向windowsconsole.log("this", this);console.log("thiswindows", this window); 在函数中 // 在函数中 this指向win…...

BabelDOC ,开源的 AI PDF 翻译工具

BabelDOC 是一款开源智能 PDF 翻译工具&#xff0c;专门为科学论文的翻译而设计。它能够在原文旁边生成翻译文本&#xff0c;实现双语对照&#xff0c;用户无需频繁切换窗口&#xff0c;极大提升了阅读的便利性。此外&#xff0c;BabelDOC 能够完整保留数学公式、表格和图形&am…...

Dify 生成提示词的 Prompt

Dify 生成提示词的 Prompt **第1次提示词****第2次提示词****第3次提示词**总结 Dify 生成提示词是&#xff0c;会和LLM进行3次交互&#xff0c;下面是和LLM进行交互是的Prompt。 以下是每次提示词的概要、目标总结以及原始Prompt&#xff1a; 第1次提示词 概要&#xff1a; …...

在nvim的snippet补全片段中增加函数注释的功能

一、补全片段路径 如果使用nvim,应当在nvim的snippet的插件中增加对应补全的片段&#xff0c;目前我所用的补全的片段路径如下&#xff1a; /home/zhaoky/.local/share/nvim/site/pack/packer/start/vim-snippets.git/snippets我当前补全的是c语言所以使用的片段是c.snippets…...

阿里云负载均衡为何费用高昂?——深度解析技术架构与市场定价策略

本文深度解析阿里云负载均衡&#xff08;SLB&#xff09;产品的定价体系&#xff0c;从技术架构、安全防护、合规成本三个维度揭示费用构成逻辑。通过2023年某跨国企业遭受的混合型DDoS攻击案例&#xff0c;结合Gartner最新安全支出报告&#xff0c;给出企业级负载均衡成本优化…...

大数据(7)Kafka核心原理揭秘:从入门到企业级实战应用

目录 一、大数据时代的技术革命1.1 消息中间件演进史1.2 Kafka核心设计哲学 二、架构深度解构2.1 核心组件拓扑2.1.1 副本同步机制&#xff08;ISR&#xff09; 2.2 生产者黑科技2.3 消费者演进路线 三、企业级应用实战3.1 金融行业实时风控3.2 物联网数据管道 四、生产环境优化…...

01背包 Java

① 记忆化搜索解法&#xff1a; import java.util.*; import java.io.*;public class Main {static int n, m;static int[] v, w;static int[][] memory; // 记忆化数组public static void main(String[] args) throws Exception {BufferedReader br new BufferedReader(new …...

【Kafka基础】消费者命令行完全指南:从基础到高级消费

Kafka消费者是消息系统的关键组成部分&#xff0c;掌握/export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-console-consumer.sh工具的使用对于调试、测试和监控都至关重要。本文将全面介绍该工具的各种用法&#xff0c;帮助您高效地从Kafka消费消息。 1 基础消费模式 1.1 从最…...

Seq2Seq - 编码器(Encoder)和解码器(Decoder)

本节实现一个简单的 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型 的编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;部分。 重点把握Seq2Seq 模型的整体工作流程 理解编码器&#xff08;Encoder&#xff09;和解码器&#xff08…...

@SchedulerLock 防止分布式环境下定时任务并发执行

背景 在一个有多个服务实例的分布式系统中&#xff0c;如果你用 Scheduled 来定义定时任务&#xff0c;所有实例都会执行这个任务。ShedLock 的目标是只让一个实例在某一时刻执行这个定时任务。 使用步骤 引入依赖 当前以redisTemplate为例子&#xff0c;MongoDB、Zookeeper…...

【力扣hot100题】(077)跳跃游戏

我最开始的想法还是太单纯了&#xff0c;最开始想着用回溯法&#xff0c;然后想到上一题的经验又想到了动态规划&#xff0c;虽然知道贪心题不太可能会这么复杂但实在想不出别的办法……果然我的智商做贪心题的极限就只能达到找零问题那种水平…… 最开始的方法&#xff0c;击…...

多光谱相机:林业监测应用(病虫害、外来物种、森林防火识别)

随着气候变暖和人类活动的增加&#xff0c;森林火灾发生的频率和强度都有所上升&#xff0c;而我国森林防火基础设施薄弱&#xff0c;监测预警体系不够完善&#xff0c;扑救能力和应急响应能力有待提高。气候变化导致气温升高、降水分布不均等&#xff0c;影响了树木的生长和发…...

Dynamic Programming(LeetCode 740)

740. 删除并获得点数 相关企业提示给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你…...

虚拟列表react-virtualized使用(npm install react-virtualized)

1. 虚拟化列表 (List) // 1. 虚拟化列表 (List)import { List } from react-virtualized; import react-virtualized/styles.css; // 只导入一次样式// 示例数据 const list Array(1000).fill().map((_, index) > ({id: index,name: Item ${index},description: This is i…...

[特殊字符] 手机连接车机热点并使用 `iperf3` 测试网络性能

好的&#xff0c;以下是根据你的描述整理出来的步骤及解释&#xff1a; &#x1f4f6; 手机连接车机热点并使用 iperf3 测试网络性能 本文将通过 iperf3 来测试手机和车机之间的网络连接性能。我们会让车机作为服务端&#xff0c;手机作为客户端&#xff0c;进行 UDP 流量传输…...

C#,VB.NET正则表达式法替换代码

如何设置必须是MGBOX开头, msgbox这种注释自动跳过 在 Visual Studio 中使用 Ctrl H 进行替换操作时&#xff0c;若要确保仅替换以 MsgBox 开头的代码&#xff0c;同时跳过注释里的 MsgBox&#xff0c;可以利用正则表达式来实现。以下为你详细介绍操作步骤&#xff1a; 1. 打…...

从MySQL快速上手大数据Hive

从MySQL快速上手大数据Hive Hive简介 ​ hive是基于Hadoop构建的一套数据仓库分析系统&#xff0c;它提供了丰富的SQL查询方式&#xff08;DML&#xff09;来分析存储在Hadoop分布式文件系统中的数据: 可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供完整的SQL查…...

基于华为云kubernetes的应用多活的示例

1 概述 为避免地域级别的故障&#xff0c;需要将单机房架构变成双地域架构&#xff08;两个机房物理距离越远&#xff0c;网络延时越大&#xff0c;网延时是业务研发首先关注的&#xff09;。单边写的多机房架构&#xff0c;是落地性比较大的一个方案&#xff0c;相对于单元化…...

Linux动态库 vs 静态库:创建步骤与优缺点对比

Linux系列 文章目录 Linux系列前言一、动静态库的概念引入1.1 库的基本概念1.2 静态库&#xff08;Static Library&#xff09;1.3 动态库&#xff08;Dynamic Library&#xff09;1.4 动静态库的核心区别 二、动静态库的实现2.1 静态库的创建及使用2.2 动态库的创建和使用三、…...

分析下HashMap容量和负载系数,它是怎么扩容的?

很好&#xff0c;我们继续深入分析 HashMap 中 容量&#xff08;capacity&#xff09; 和 负载因子&#xff08;load factor&#xff09;&#xff0c;以及它是如何进行 扩容&#xff08;resize&#xff09; 的。 &#x1f9f1; 一、容量&#xff08;capacity&#xff09;与负载…...

Linux权限管理:从入门到实践

目录 引言 ​编辑一、Linux用户类型 二、文件访问者分类 三、文件类型和访问权限 &#xff08;一&#xff09;文件类型 &#xff08;二&#xff09;基本权限 四、文件访问权限设置方法 &#xff08;一&#xff09;chmod命令 &#xff08;二&#xff09;chown命令 &…...

计算机网络(1)

名称解析 名称解析&#xff1a;将名称解析成对应地址&#xff0c;名字-->IP 名称解析优点&#xff1a;便以记忆、解耦&#xff08;断开直接的练习&#xff09; 容器 mini的虚拟机&#xff0c;该容器地址是动态的、生命周期短暂&#xff1b;可实现登录功能 如果用户想要登录该…...

第十一天 - MySQL/SQLite操作 - 数据库备份脚本 - 练习:监控数据存储系统

数据库实战入门&#xff1a;从零构建监控数据存储系统 前言 在物联网和系统监控领域&#xff0c;数据存储是核心基础环节。本文将通过MySQL/SQLite操作、数据库备份脚本和监控数据存储实战三个模块&#xff0c;带领初学者快速掌握数据库在真实场景中的应用。文章包含25个代码…...

编写文生视频提示词,制作抖音爆款视频

编写文生视频提示词&#xff0c;制作抖音爆款视频 一、理解文生视频提示词1.1 定义提示词1.1.1 提示词与创作工具的关系1.1.2 文生视频的功能 1.2 提示词的组成1.2.1 主体&#xff08;Subject&#xff09;1.2.2 动作&#xff08;Action&#xff09;1.2.3 场景&#xff08;Scene…...

Linux: 线程控制

目录 一 前言 二 线程控制 1. POSIX线程库(原生线程库) 2. 创建线程 2.1 pthread_create 2.2pthread_self()获取线程id 3.线程终止 3.1.return 方式 3.2 pthread_exit 4 线程等待 三 理解线程tid 一 前言 在上一篇文章中我们已经学习了线程的概念&#xff0c;线程的创…...

为什么 npm list -g 没显示 node_modules?✨

揭秘&#xff1a;为什么 npm list -g 没显示 node_modules&#xff1f;&#x1f575;️‍♂️✨ 嗨&#xff0c;各位代码探险家&#xff01;&#x1f44b; 今天我们要破解一个 npm 小谜团&#xff1a;运行 npm list -g --depth0 时&#xff0c;为什么输出的路径里看不到 node_…...

华为数字芯片机考2025合集4已校正

单选 1. 题目内容 影响芯片成本的主要因素是 Die Size 和封装&#xff0c;但电源、时钟等因素&#xff0c;特别是功耗对解决方案的成本影响较大&#xff0c;因此低成本设计需要兼顾低功耗设计&#xff1a;&#xff08;&#xff09; 1. 解题步骤 1.1 分析题目 Die Size&…...

达摩院Paraformer-ONNX模型:一站式高精度中文语音识别工业级解决方案

文章目录 核心技术创新三大部署方案对比1. Docker极简部署&#xff08;推荐&#xff09;2. Python API直连调用3. 客户端实时测试工具 高阶调优技巧典型应用场景高频问题解决方案参考 阿里达摩院推出的speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-on…...

Llama 4的争议

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

React七案例下

代码下载 登录模块 用户登录 页面结构 新建 Login 组件&#xff0c;对应结构: export default function Login() {return (<div className{styles.root}><NavHeader className{styles.header}>账号登录</NavHeader><form className{styles.form}>&…...

Rust包管理与错误处理

文章目录 包管理箱&#xff08;Crate&#xff09;包&#xff08;Package&#xff09;模块&#xff08;Module&#xff09;访问权限use关键字 错误处理不可恢复错误可恢复错误错误传递kind方法 包管理 Rust的包管理有三个重要的概念&#xff0c;分别是箱、包、模块 箱&#xf…...

关于gitee的readme文档中的图片问题

使用markdown编辑readme文档&#xff0c;需要注意 添加图片&#xff0c;但是不显示问题 1.记得连图片一起上传到仓库中&#xff0c;不能只是在本地markdown文件中复制就结束了&#xff0c;因为存储的是本地图片地址&#xff0c;上传后找不到的 2.注意使用网络地址&#xff0…...

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法

记录vscode连接不上wsl子系统下ubuntu18.04问题解决方法 报错内容尝试第一次解决方法尝试第二次解决方法注意事项参考连接 报错内容 Unable to download server on client side: Error: Request downloadRequest failed unexpectedly without providing any details… Will tr…...

aws平台练习

注册 AWS 账户 访问 AWS 官方网站&#xff0c;点击“免费注册”按钮&#xff0c;按照提示完成账户注册&#xff1a; 提供电子邮件地址、密码和电话号码。 验证身份&#xff08;可能需要手机验证码&#xff09;。 设置 billing 信息。 2. 登录 AWS 管理控制台 使用注册的邮箱和…...

实战篇-梳理时钟树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 这是B站傅里叶的猫视频的笔记 一、建立工程 以Vivado的wave_gen为例子。为了引入异…...

【Hadoop入门】Hadoop生态之Hive简介

1 什么是Hive&#xff1f; 1.1 Hive概述 在大数据时代&#xff0c;如何让传统的数据分析师和SQL开发人员也能轻松处理海量数据&#xff1f;Hive应运而生。Hive是基于Hadoop构建的一套数据仓库分析系统&#xff0c;它提供了一种类似SQL的查询语言&#xff08;HQL&#xff09;&a…...

DSP复习【3章】

F2812提供了XINTF用于扩展并行接口的外设芯片。 XINTF&#xff08;外部接口&#xff09;所需的时钟是 SYSCLKOUT 和 XTIMCLK。 所以正确答案是&#xff1a; ✅ SYSCLKOUT 和 XTIMCLK 什么是XREADY信号&#xff0c;如何使用&#xff1f; 章节例题&#xff1a; 1. 如何通过软件判…...

Hadoop案例——流量统计

Hadoop案例——流量统计 在大数据时代&#xff0c;流量统计是许多企业和组织的关键需求之一。通过分析网络流量数据&#xff0c;企业可以优化网络资源分配、提升用户体验、制定精准的营销策略等。本文将介绍如何使用 Hadoop 框架实现一个简单的流量统计案例&#xff0c;包括数…...

Linux管道 有名管道(FIFO)工作机制全解:从理论到实践

有名管道&#xff08;重要&#xff09; 有名管道/命名管道&#xff0c;主要用于没有血缘关系进程间的通信 当然也支持有血缘关系的情况&#xff0c;只是如果有血缘关系&#xff0c;没有必要使用有名管道&#xff0c;无名管道效果更佳 引入 好了&#xff0c;现在使用条件有了…...

java基础-修饰符

java修饰符 修饰符分类访问修饰符的作用域代码说明访问修饰符总览 非访问修饰符staticfinalabstractsynchronizedvolatiletransientnativestrictfp非访问修饰符总览表 非访问修饰符组合与冲突规则 修饰符分类 分类&#xff1a;访问修饰符 和 非访问修饰符 1.访问修饰符 公共…...

解锁基因密码之重测序(从测序到分析)

在生命科学的奇妙世界中&#xff0c;基因恰似一本记录着生命奥秘的“天书”&#xff0c;它承载着生物体生长、发育、衰老乃至疾病等一切生命现象的关键信息。而重测序技术&#xff0c;则是开启基因“天书”奥秘的一把神奇钥匙。 试想&#xff0c;你手中有一本经典书籍的通用版…...

当使用 Docker Desktop 启动 Tomcat 镜像时时间不对

当使用 Docker Desktop 启动 Tomcat 镜像时时间不对&#xff0c;可能由以下原因导致并可采取相应解决方法&#xff1a; 宿主机时间设置问题&#xff1a;Docker 容器的时间是由宿主机提供的&#xff0c;如果宿主机的时间不正确&#xff0c;那么容器的时间也会不正确。需确保宿主…...

golang gmp模型分析

思维导图&#xff1a; 1. 发展过程 思维导图&#xff1a; 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有&#xff1a; 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…...

Redisson的RedLock与联锁(MultiLock)的区别

Redisson提供了两种分布式锁机制&#xff1a;RedLock(红锁)和MultiLock(联锁)&#xff0c;它们在实现分布式锁时有重要区别。 1. RedLock (红锁) 设计原理&#xff1a; 基于Redis官方提出的Redlock算法实现目的是在Redis集群环境下提供更可靠的分布式锁需要至少3个独立的Redi…...

图灵逆向——题十-魔改算法

目录列表 过程分析JS代码还原代码实现运行结果 本题属于魔改标准加密算法&#xff0c;所以无法使用JS或Python中的标准库来进行模拟加密了&#xff0c;只能一步一步的还原它的环境咯。。。 过程分析 打开控制台发现有个无限debugger&#xff0c;直接过掉~[doge]。。。 OK过掉…...

K8S学习之基础七十九:关闭istio功能

关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间&#xff0c;pod都会开启istio功能 反之&#xff0c;如果要开启istio&#xff0c;在对应命名空间打上该标签即可...

AI大模型课程系列汇总-某客时间篇

某客时间系列篇章&#x1f4a5; NO.文章&#xff08;点击可跳转&#xff09;1【课程系列11】某客时间AI 大模型应用开发实战营_ai大模型应用开发实战营 百度云-CSDN博客2【课程系列12】某客时间AI大模型微调训练营_极客时间 大模型rag 网盘-CSDN博客3【课程系列15】2024某客时…...

【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例

今天田辛老师和小伙伴探讨了一个有趣的多义词问题&#xff0c; 在人工智能技术日新月异的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的&#xff1f; 比如&#xff1a;当用户提到"…...

Coze平台 发布AI测试Agent的完整实现方案

以下是基于 Coze平台 发布AI测试Agent的完整实现方案,包含架构设计、核心功能模块、集成方式和落地步骤: 一、方案架构图 #mermaid-svg-kzS7cltxrbetjROl {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kzS7cltxr…...

OpenHarmony子系统开发 - 调测工具(二)

OpenHarmony子系统开发 - 调测工具&#xff08;二&#xff09; 三、hiperf使用指导 hiperf是为开发人员提供性能采样分析的工具&#xff0c;基于内核perf机制进行的用户态能力的扩展&#xff0c;可以对指定的程序或者整个系统进行性能采样。 hiperf支持的命令有&#xff1a;l…...