This 指向问题

chatgpt赋能python:Python箭头的正确打法 在Python中正确使用箭头是非常重要的。正确格式化箭头可以提高代码的可读性和可维护性,并避免语法错误。在声明函数的返回类型时,请务必保证箭头的前后都有空格。这是Python语言规范的一部分,也是作为一名Python工程师的基本技能之一。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。 阅读详情

不同情况的调用,this指向分别如何。顺带可以提一下 es6 中箭头函数没有 this, arguments, super 等,这些只依赖包含箭头函数最接近的函数

我们先来看几个函数调用的场景

function foo() {
  console.log(this.a)
}
var a = 1
foo()

const obj = {
  a: 2,
  foo: foo
}
obj.foo()

const c = new foo()
  • 对于直接调用 foo 来说,不管 foo 函数被放在了什么地方,this 一定是window
  • 对于 obj.foo() 来说,我们只需要记住,谁调用了函数,谁就是 this,所以在这个场景下 foo 函数中的 this 就是 obj 对象
  • 对于 new 的方式来说,this 被永远绑定在了 c 上面,不会被任何方式改变 this

说完了以上几种情况,其实很多代码中的 this 应该就没什么问题了,下面让我们看看箭头函数中的 this

function a() {
  return () => {
    return () => {
      console.log(this)
    }
  }
}
console.log(a()()())
  • 首先箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第一个普通函数的 this。在这个例子中,因为包裹箭头函数的第一个普通函数是 a,所以此时的 this 是 window。另外对箭头函数使用 bind这类函数是无效的。
  • 最后种情况也就是 bind 这些改变上下文的 API 了,对于这些函数来说,this 取决于第一个参数,如果第一个参数为空,那么就是 window。
  • 那么说到 bind,不知道大家是否考虑过,如果对一个函数进行多次 bind,那么上下文会是什么呢?
let a = {}
let fn = function () { console.log(this) }
fn.bind().bind(a)() // => ?

如果你认为输出结果是 a,那么你就错了,其实我们可以把上述代码转换成另一种形式

// fn.bind().bind(a) 等于
let fn2 = function fn1() {
  return function() {
    return fn.apply()
  }.apply(a)
}
fn2()

可以从上述代码中发现,不管我们给函数 bind 几次,fn 中的 this 永远由第一次 bind 决定,所以结果永远是 window

let a = { name: 'poetries' }
function foo() {
  console.log(this.name)
}
foo.bind(a)() // => 'poetries'

以上就是 this 的规则了,但是可能会发生多个规则同时出现的情况,这时候不同的规则之间会根据优先级最高的来决定 this 最终指向哪里。

首先,new 的方式优先级最高,接下来是 bind 这些函数,然后是 obj.foo() 这种调用方式,最后是 foo 这种调用方式,同时,箭头函数的 this 一旦被绑定,就不会再被任何方式所改变。

image.png

函数执行改变this

  • 由于 JS 的设计原理: 在函数中,可以引用运行环境中的变量。因此就需要一个机制来让我们可以在函数体内部获取当前的运行环境,这便是this。

因此要明白 this 指向,其实就是要搞清楚 函数的运行环境,说人话就是,谁调用了函数。例如

  • obj.fn(),便是 obj 调用了函数,既函数中的 this === obj
  • fn(),这里可以看成 window.fn(),因此 this === window

但这种机制并不完全能满足我们的业务需求,因此提供了三种方式可以手动修改 this 的指向:

  • call: fn.call(target, 1, 2)
  • apply: fn.apply(target, [1, 2])
  • bind: fn.bind(target)(1,2)
关于this指向问题及改变this指向的方法 this指向详解 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才确定this到底指向谁 一般情况下this指向调用它的对象 下面我们来看看this被调用时的五种情况 思维导图 分析 1.作为对象方法被调用 当函数作为对象方法被调用时this指向该对象 var obj = { age: 18, fn: function () { console.log(this ===.. 阅读详情

相关推荐

Matlab/simulink频率响应分析方法

Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块

virtuoso~晓晓 3万+

JavaScript中的This问题

我们先来看几个函数调用的场景 function foo() { console.log(this.a) } var a = 1 foo() const obj = { a: 2, foo: foo } obj.foo() const c = new foo() 对于直接调用 foo 来说,不管 foo 函数被放在了什么地方,this 一定是window 对于 obj.foo() 来说,我们只需要记住,谁调用了函数,谁就是 this,所以在这个场景下 foo 函数中的 this 就是.

LuckXinXin的博客 235

通义千问对接FreeSWITCH实现大模型呼叫中心

通义千问是由阿里云开发的大规模语言模型,具备优秀的自然语言处理能力,支持文本生成、问答对话、摘要提取等多种任务。它不仅拥有丰富的知识储备,还能根据上下文灵活调整回答策略,适用于各种复杂场景下的自动化交流。FreeSWITCH是一个开源的多媒体通信服务器,提供了包括VoIP通话、即时消息传递在内的多种通信服务。它的模块化设计允许开发者根据实际需求定制功能,广泛应用于企业级通信系统中。通过集成通义千问,FreeSWITCH能够实现更智能的客户服务体验。

技术永不眠 Q:53195017 1499

【JS】你还是搞不清楚原型,new,instanceof,this,执行上下文吗?

原型 每个函数都有 prototype 属性,除了 Function.prototype.bind(),该属性指向原型。 每个对象都有 __proto__ 属性,指向了创建该对象的构造函数的原型。其实这个属性指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用 _proto_ 来访问。 对象可以通过 __proto__ 来寻找不属于该对象的...

你若盛开,清风自来 419

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

对比式视觉-语言预训练,也称为CLIP,通过大规模的图像-文本对来学习视觉表示,为zero-shot知识迁移展示了新的范式。它在下游任务上展现出令人瞩目的性能,实现了zeri-shot的知识迁移。为了进一步增强CLIP的适应能力,现有方法提出了微调可学习模块的方法,显著提高了少样本情况下的性能,但也引入了额外的训练时间和计算资源。在本文中,我们提出了一种适用于CLIP的无需训练的少样本分类方法,称为Tip-Adapter。

qq_43800752的博客 1164

IEEE论文投稿必看:PDF eXpress报错font not embedded的3种修复方法(附Adobe Acrobat DC操作截图)

本文针对IEEE论文投稿时PDF eXpress系统常见的“font not embedded”报错,提供了三种核心修复方案。首先,详细解析了使用Adobe Acrobat DC进行专业修复的完整操作流程与关键技巧。其次,介绍了无需付费软件的开源与免费工具链(如Ghostscript)解决方案。最后,从源头出发,指导LaTeX和Microsoft Word用户在生成PDF时正确设置以确保字体自动嵌入,帮助研究者彻底解决格式问题,确保投稿顺利。

ujm56789012的博客 516

js函数

函数 函数命名方法 (1)function命令: function print(){ console.log(s); } (2)函数表达式: var print=function(){ console.log(s); } (3)function构造函数: var add=new Function(‘x’, ‘y’,‘return x+y’); 等同于 function add(x,y){ retu...

qq_41293573的博客 298

基于 Qt C++ 的智能工厂数字孪生系统

你想要实现一个基于 Qt C++ 的智能工厂数字孪生系统,核心是 **Qt 3D** 场景搭建 + **实时数据驱动** 设备模型。下面我将为你提供一个完整的解决方案,包含 **核心思路、实现步骤、完整代码示例** 和 **注意事项**。| **渲染层** | 3D 场景搭建、设备模型加载、实时动画渲染、用户交互。| **业务逻辑层** | 数据处理(滤波、转换)、设备状态管理、动画逻辑控制。| **数据层** | 实时采集设备数据(如传感器、PLC、MES 系统),提供数据接口。

寒寒豆豆软件公司的博客 193

python箭头函数_函数----箭头函数

1.箭头函数是es6中新增加特性。与普通函数的区别相比之前的函数,外观看更加的简单,简洁;例如:es5中let doNothing=function(){}es6中let doNothing=()=>{}2.箭头函数不能通过new关键字调用 箭头函数没有Construct方法,所以不能被用作构造函数,如果通过new关键字调用箭头函数,程序会抛出错误。3.没有原型,由于不可以通过new关...

weixin_39567870的博客 1816

【unity小技巧】委托(Delegate)的基础使用和介绍

在Unity中,委托(Delegate)是一种用于处理方法回调的特殊类型。它允许您将方法作为参数传递给其他方法,并在需要时调用这些方法。委托在游戏开发中非常有用,特别是在事件处理、消息传递和异步操作方面。它提供了一种灵活的方式来注册和触发方法,而无需显式地知道这些方法的实现细节。个人理解:可以把委托理解为一个容器,容器里面放可以放很多函数方法。一调用委托,里面所有的函数方法都会同步被执行。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7239

Altium Designer系列: 软件系统参数配置保存

【Altium Designer实践】 软件系统参数配置保存 作者 CodeAllen ,转载请注明出处 目录设置中文菜单高亮模式设置文件关联pcb设置布线设置保存配置文件(复用) 设置中文菜单 DXP->Preferences 高亮模式设置 文件关联 pcb设置 布线设置 保存配置文件(复用) ......

CodeAllen嵌入式 2019

This指向问题

ArkTS语法中关于this指向问题的学习汇总

Andrew_gz的博客 1665

XCP详解「3.1·ASAP2新建A2L文件」

后面是ASAP2新建A2L的操作步骤,如果是APE中新建的A2L就无需以下操作,APE只需要导入现成的A2L即可。退出点击保存时会提示保存A2L文件,是因为前面导出的是1.70版本,工程最低1.71,可以另外起个名字即可。导入elf文件,elf路径建议直接索引编译生成的Debug下的,防止编译后忘记更新。导出V1.70格式A2L文件,APE17支持V1.70。通过ASAP2生成需要A2L文件更常用些。同一个信号可以创建不同属性量。ASAP2中新建A2L文件。设置标定信号数量最大值。XCP详解「总目录」

光明磊学习&积累的地方 3061

js中this指向问题

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

weixin_46541579的博客 1330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

this的指向问题

js 中的 this 指向十分重要,在我们的工作和面试中也会时常遇到,倒是对this,总是不太了解,今天我来带大家系统的了解和学习一下。 一、this的指向 this 总是(非严格模式下)指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境; this的指向大体分为以下几种情况: 1、全局作用域和普通函数调用,此时 this 指向 window 当函数不作为对象的属性被调用,而是以普通函数的方式,this总是指向全局对象(在浏览器中,通常是Window对象

code_J的博客 4862

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

关于this的指向问题

关于这个问题,我们常听到一句话: 谁调用它,它就指向谁。 先观察以下几段代码。 场景一 alert(this); //弹出[object window] //window.alert(this); 省略了window js中规定,如果指向window,则window可省略。 场景二 <body> <button id="btn">点击</button> ...

liujiebahuang的博客 325

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【鸿蒙】鸿蒙开发过程中this指向问题

在 TypeScript 开发中,尤其是在使用面向对象编程(OOP)或基于组件的框架(如 React 或 HarmonyOS)时,this 的指向问题是一个常见且容易引发错误的挑战。本文将深入探讨 this 的绑定机制,并通过一个实际案例,展示如何在 TypeScript 中正确处理 this 的指向问题。

tatasix的博客 2389

this指向问题,看这一篇就够了!

的时候,他就自动捕获其。

2301_80723943的博客 1926

Vue中this的指向问题

最近一直在做毕业设计,学习了Vue用来写了很多的前端代码,不得不说js对我这个“Java前端程序员”有些太不友好,时不时都能遇到一些坑,this就是其中之一。

Rhine 2万+

一次搞懂this指向问题

【代码】一次搞懂this指向问题。

小虾的博客 952

JavaScript中this的指向问题

JavaScript中this的指向问题

cql_fan的博客 1060

js中的this指向问题以及改变this指向

JS中的this 指向问题 代码解释: <!-- <button>点击</button> --> <script> var Btn = document.getElementsByTagName("button")[0]; Btn.onclick = function(){ console.log(this); //button fun () } function fun(){

weixin_51723279的博客 266

vue中的this指向问题

最近写项目遇到很多this指向的问题,今天来写一下我总结的this指向 看了很多文章,之前也在私下总结过,对于正常函数,谁调用的它,this就指向谁,而箭头函数没有this,它的this指向一般就是上下文中,与谁调用它没关系。 但是在Vue实例中,methods中如果用的是正常函数,那么它的this就指向Vue实例;如果是箭头函数,this就指向window对象。 在Vue的官方文档是这么解释的: methods 将被混入到 Vue ...

JINGinC的博客 1万+

Vue中this指向问题

一、methods中this 1.通常methods属性中的回调函数的this都会指向vue实例 //第一种写法: var vm = new Vue({ el:'app', data:{ name:'', list:[], }, methods:{ handle :function(){ // this.list.push

webDevelopSnail的博客 1636

Vue框架中this指向问题

的指向问题与 JavaScript 的基本规则一致,但由于 Vue 的框架特性,其。在不同的场景下有特定的含义和使用方式。以下是 Vue 中常见的。如果 Vue 的方法调用了外部普通函数,而函数内部没有正确绑定。,可以将初始值硬编码,或者使用生命周期钩子来动态赋值。但如果直接将方法传递给其他原生事件处理器,如。),可以通过它访问实例的属性和方法。默认指向当前的 Vue 实例(在 Vue 的组件或根实例中,Vue 自动将事件处理器中的。指向情况和可能遇到的问题。会继承其定义时的上下文。,可能会导致指向问题。

gklcsdn的博客 867

JavaScript中this指向问题

箭头函数本身没有this,箭头函数中的this与上级作用域中的this相同。函数还可以作为某个对象的方法调用,这时this就指向这个调用函数的对象。bind方法会将函数的this,永久捆绑在指定的对象上,不能改变。在let中声明的箭头函数,存储在脚本作用域中,

m0_72752380的博客 1929
上一篇: apply/call/bind 实现原理
下一篇: Bootstrap 网格系统(Grid System)的工作原理
小码哥・Martin
博客等级 码龄18年 10粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码哥・Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值