this

宏和this指针 宏,是一种批量处理的称谓。计算机科学中,代表根据一系列预定义的规则替换一定的文本模式。宏起源于汇编语言macro替换。宏用于预处理,在编译之前,sizeof是编译期计算,它是在预处理之后,所以不能将sizeof放到预处理指令中判断。 阅读详情

**this 是在运行式进行绑定的,并不是在编写是绑定
this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式
this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用**

默认绑定

var a = 'aaa';
var obj = {
    a: 'bbb'
}
var fun = {
    a: 'ddd',
    foo: function(){
        (function(){
            var a = 'ccc';
            console.log(this.a)
        })(); //=>aaa

        (function(){
            console.log(this.a) //=>bbb
        }).call(obj);

        (function(){
            console.log(this.a)  //=>ddd
        }).call(fun);    
    }
}
fun.foo();
//匿名函数内默认this指向window

如果使用严格模式,则不能将全局对象用户默认绑定,因此this会绑定到undefined

function foo(){
    "use strict";
    console.log(this.a)
}
var a = 3;
foo()  //Uncaught TypeError: Cannot read property 'a' of undefined

隐式绑定

function foo(){
    console.log(this.a);
}
var obj = {
    a:2,
    foo: foo
}
obj.foo(); //=>2

隐式绑定的函数会丢失绑定对象

function foo(){
    console.log(this.a);
}
var obj = {
    a:2,
    foo: foo
};
var bar = obj.foo;
var a ="oops";
bar();  //=> 'oops'
function foo(){
    console.log(this.a)
}
function doFoo(fn){
    //fn其实引用的是foo
    fn(); //调用位置,因为doFoo的作用域中没有变量a,所以往上找到全局变量a='global'
}
var obj = {
    a: 2,
    foo: foo
}
var a = 'global';
doFoo(obj.foo) //=>'global'

显示绑定

function foo(){
    console.log(this.a)
}
var obj = {
    a: 2
}
foo.call(obj) //=>2

如果传入的是一个原始值,这个原始值会转换成它的对象形式,这个过程称为“装箱”

function foo(){
    console.log(this)
}
foo.call(2) //=>Number
foo.call("str") //>String

new绑定
使用new 来调用函数,会自动执行下面的操作
1. 创建一个全新的对象
2. 这个新对象会被执行prototype连接
3. 这个新对象会绑定到函数调用的this
4. 如果函数没有返回其他对象,则new表达式中的函数调用会自动返回这个新对象

function foo(a){
    this.a = a;
}
var bar = new foo(2);
console.log(bar.a) //=>2

箭头函数中的this

箭头函数中的this是根据外层(函数或者全局)作用域来决定的,即会继承外层函数调用的this绑定

function foo(){
    return (a) => {
        console.log(this.a)
    }
}
var obj1 = {
    a: 2
};
var obj2 = {
    a: 3
}
var bar = foo.call(obj1);
bar.call(obj2)   //=>2

foo内部创建的箭头函数会捕获调用时foo()的this,由于foo的this绑定到obj1,bar的this也会绑定到obj1,箭头函数的绑定无法被修改

如果要判断一个运行中的函数的this绑定,就需要找到这个函数的直接调用位置,找到之后就可以顺序应用以下四条规则来判断this的指向:

  1. 由new调用?绑定到新创建的对象
  2. 由call、apply或bind调用?绑定到制定对象
  3. 由上下文对象调用?绑定到那个上下文对象
  4. 默认,在严格模式下绑定到undefined,否则绑定到全局对象
Trae编程工具Cline插件深度集成与Claude 3.7 API Key高级配置实战 本文详细介绍了如何在Trae编程工具中深度集成Cline插件并配置Claude 3.7 API Key的高级技巧。通过实战案例,展示了如何提升代码补全质量、实现多轮对话记忆及自定义代理设置,特别适合全栈工程师和需要私有化AI服务的团队。文章还涵盖了安装流程、API Key获取方式及企业级部署的最佳实践。 阅读详情

相关推荐

Stable-Baselines3性能优化:多环境训练对比指南(DummyVecEnv vs SubprocVecEnv)

本文深入对比了Stable-Baselines3中DummyVecEnv与SubprocVecEnv两种向量化环境的性能差异与应用场景。DummyVecEnv适用于轻量级、步进快的环境,调试友好且开销低;而SubprocVecEnv则通过真正的多进程并行,能显著加速计算密集型环境的训练。文章通过基准测试与决策树,指导开发者根据环境计算成本、CPU核心数等关键因素做出最优选择,以实现训练效率最大化。

weixin_29063979的博客 148

Ruby中的self剖析

这部分其实也是基础知识的一部分,但是这是元编程很重要的一环,所以单独拿出来写一下,希望可以帮助自己的更好理解它的思想和用法。 self上下文 Ruby的self有和Java的this已经C++的this指针都有相似之处,但又大不相同。Java的方法都是在实例方法中引用,所以this一般都是指向当前对象的。而 Ruby的代码逐行执行,所以在不同的上下文(context)self就有了不同的含义...

zyhmz的博客 4896

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

java中的this关键字如何理解?

1 class A{ 2 int i; 3 4 public A(int i){ 5 this.i = i;//代表当前已经创建的对象 6 } 7 8 public void show(A * this){//this代表当前正在调用show方法的对象 9 ...

Sun's Blog 157

西门子S7-200 SMART控制步进电机(二)

目录 一、开环运动控制方法 二、运动轴概述 三、配置运动控制向导 一、开环运动控制方法 S7-200 SMART CPU提供三种开环运动控制的方法: 1、脉冲宽度调制(PWM):内置于CPU中,用于速度、位置或占空比的控制 2、脉冲串输出(PTO):内置于CPU中,用于指定长度脉冲或指定距离的控制 3、运动轴:内置于CPU总,用于速度和位置的控制。本文所讲的就是通过运动轴实现步进电机的运动控制。 SR20和ST20 CP...

qq_43134642的博客 2万+

变压器励磁电感、励磁电流、漏感、漏感折算

励磁、漏感知识整理

HW-BASE的博客 1万+

this:它到底指向哪里!箭头函数的this又是啥?

this 总结一句话 谁最终调用,this 就指向谁。 默认绑定 指针默认绑定的是 window console.log(this); // window 写全局函数的话,也是指向的 window function a() { console.log(this); } a() // window //实际上是 window.a(); 我们可以展开window看看 定时器是window下的方法,所以this也会指向window。 /

Lovely Ruby 的手账 851

Neo4j 智能供应链应用源代码简析

本文简析Neo4j智能供应链应用的源代码,让你也可以快速开发自己的供应链应用。

Neo4j 开发者博客 1681

this 指向

判断普通函数的 this ,就去找它的调用方法判断箭头函数的 this ,就去找它在哪里创建的。

qq_62597228的博客 1850

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 602

把 MANDT 锁进保险箱:ABAP Client Handling 与 Client Isolation(聚焦 AMDP 的 Client Safety )

本文探讨了ABAP系统中Client Handling与Client Isolation机制的演进,重点分析了AMDP环境下多租户隔离的风险与解决方案。传统ABAP SQL/CDS通过隐式Client过滤提供安全保障,而AMDP因其原生SQLScript特性容易绕过隔离机制。文章对比了旧时代依赖开发自觉的传参方式与新时代通过AMDP OPTIONS强约束的语法方案,详细介绍了CLIENT INDEPENDENT和CDS SESSION CLIENT DEPENDENT两种编译期安全机制,阐述了USING列表

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

JS中的this详解

JS中的this 背景 JS中的this指向问题,一直以来自己并不是十分的清楚,平时在开发中使用时到是也能正常应用,但是对其使用和判断并不能信手拈来,所以自己搜索了一些资料,总结了一下,也希望对大家有所帮助。 目录 什么是this? this的指向 为什么要使用this? 什么的this? this,从字面上含义是“这个”, 所以在JS中this表示的就是当前对象,但这个“当前对象”到底指的是哪个对象,是由运行时所在的上下文环境决定的。 简言之:当前是谁调用了我,我就指向谁; this:表示当前对象。

weixin_42321292的博客 1万+

SAP Joule 经过了超过 2.5 亿行 ABAP 代码的训练之后......

披露的统计数据,Joule 提供的这种全新系统交互方式,可将事务性任务执行速度提高 90%,访问 SAP Help Portal 内容的速度提高 95%。在 ABAP 应用开发领域,SAP 官网数据显示,Joule 经过超过 2.5 亿行 ABAP 代码的训练,有信心成为这一领域行业领先的代码助手。刚刚过去的 SAP 蓝宝石大会上,SAP 提到,从2023年第四季度以来,SAP 已经交付了 50 项基于人工智能的创新。让其生成 SAP 应用能够识别的结构化应用数据,业务用户全程无需离开 SAP 应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 803

JS中的this是什么,this的四种用法

在Javascript中,this这个关键字可以说是用的非常多,说他简单呢也很简单,说他难呢也很难,有的人开发两三年了,自己好像也说不清this到底是什么。下面我们来看看: 1、在一般函数方法中使用 this 指代全局对象 function hello(){ this.x = 1; console.log(this.x) } hello(); //此时控制台打印1 2....

坐看云起时_雨宣 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

this是什么

这里先贴一下原文作者HARRISKING 我在这里换一种表达 要调用一个函数,有几种方式 1、方法调用模式,函数在对象里面的时候,叫做对象的属性,也是对象的方法 此时的this:当一个方法被调用的时候,this绑定到该对象上,所以是这个对象里面的东西。 var obj = { name:"harrisking", foo: function(){ console.log(this.name); //输出harrisking //这里的this指的就是对象obj; } } 2、函数调用模

weixin_42357617的博客 2507

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue中以this.$xx的属性

this.$el 获取Vue实例关联的DOM元素;vue中也是允许进行dom操作的(但是不建议) 注意this.$el关联的是真实Dom,所以需要在mounted渲染真实Dom之后才可以使用了 this.$refs 获取页面中所有含有ref属性的DOM元素(如vm.$refs.hello,获取页面中含有属性ref = “hello”的DOM元素,如果有多个元素,那么只返回最后一个) this.$options 获取Vue实例的自定义属性(如this.$options.methods...

kwame211的博客 6864

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

javascript this和_this的区别

this通常用于保持对期望的this的引用、闭包中的this引用不会改变、this在回调中的指向保持一致性。在普通函数调用中,this通常指向全局对象(在浏览器中是window),在方法调用中指向调用方法的对象,在构造函数中指向新创建的对象。总结来说,this是JavaScript中一个指向函数执行时的当前对象的关键字,而_this是一个常规变量,通常用于在特定的作用域中保留this的引用。当函数返回一个闭包时,这个返回的函数可能在其他地方执行,这时候通过_this可以保持对期望的this对象的引用。

s11show_163的博客 596

9.4 this,this指向

this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

2503_92841156的博客 927

jQuery中this与$(this)的使用与区别

this与$(this)的区别 this其实是一个Html 元素,是一个javascript对象,常用其来为其属性赋值。 $(this)是一个jQuery对象,不存在html的属性,只能通过方法传参的方式为属性赋值。 如下代码 $(“#textbox”).hover( function() { this.title = “Test”; }, fucntion() { this.t...

进化的深山猿 3047

java this 和 js this

java 中的this就是 类的一个实例,就是对象 public class Test{ private String str; private List linkedList; //this对象 public Test this; public void test(Test this, String str, List linkedLis...

q503385724的博客 456

JavaScript 之 this 指向

JavaScript 之 this 指向问题

原来是有理数 1077

微信小程序中this.data与this.setData的区别详解

//微信小程序注意下面两种赋值方式的区别,影响页面数据的渲染显示 一、页面不会重新渲染 that.data.tipsshow2=true: 二、页面不会重新渲染 that.setData({ tipsshow2: true }) 下面的文章对这个问题说明的比较清晰 -------------------------------------------- 一、摘要 小程序中我们会经常使用到this.data与this.setData。其中this.data是用来获取页面data对象的,而this

滴水石穿 7269
上一篇: javascript 容易忘记的知识点
下一篇: 杂七杂八什么都有(一)
ruby_xc
博客等级 码龄10年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值