js中的this

智能体评测技术与实践:从评估维度到DeepEval实战指南 智能体评测技术与实践:从评估维度到DeepEval实战指南 本文系统探讨了AI智能体的评测体系与实践方法。首先从四个关键维度构建评估框架:基础能力(意图理解、知识完整性)、复杂任务(多轮对话、动态工作流)、可靠性(幻觉抑制、安全合规)以及工具效率(参数填充、多工具协同)。其次分析了主流评测工具,包括xBench的动态双轨评估、DeepEval的全链路监控等解决方案。最后详细介绍了DeepEval的实战应用,涵盖环境配置、测试用例构建、指标配置及CI/CD集成,展示了如何通过代码化评估实现智能体质量的持续提升 阅读详情

首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题。

  为什么要学习this?如果你学过面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂时可以不用看这篇文章,当然如果你有兴趣也可以看看,毕竟这是js中必须要掌握的东西。

 

例子1:

function a(){
    var user = "hello";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();

按照我们上面说的this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的,下面的代码就可以证明。

function a(){
    var user = "hello";
    console.log(this.user); //undefined
    console.log(this);  //Window
}
window.a();

和上面代码一样吧,其实alert也是window的一个属性,也是window点出来的。

例子2:

复制代码

var o = {
    user:"hello",
    fn:function(){
        console.log(this.user);  //hello
    }
}
o.fn();

复制代码

  这里的this指向的是对象o,因为你调用这个fn是通过o.fn()执行的,那自然指向就是对象o,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。

 

其实例子1和例子2说的并不够准确,下面这个例子就可以推翻上面的理论。

如果要彻底的搞懂this必须看接下来的几个例子

 

例子3:

复制代码

var o = {
    user:"hello",
    fn:function(){
        console.log(this.user); //hello
    }
}
window.o.fn();

复制代码

  这段代码和上面的那段代码几乎是一样的,但是这里的this为什么不是指向window,如果按照上面的理论,最终this指向的是调用它的对象,这里先说个而外话,window是js中的全局对象,我们创建的变量实际上是给window添加属性,所以这里可以用window点o对象。

  这里先不解释为什么上面的那段代码this为什么没有指向window,我们再来看一段代码。

复制代码

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //12
        }
    }
}
o.b.fn();

复制代码

  这里同样也是对象o点出来的,但是同样this并没有执行它,那你肯定会说我一开始说的那些不就都是错误的吗?其实也不是,只是一开始说的不准确,接下来我将补充一句话,我相信你就可以彻底的理解this的指向的问题。

  情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

  情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

  情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象,例子3可以证明,如果不相信,那么接下来我们继续看几个例子。

复制代码

var o = {
    a:10,
    b:{
        // a:12,
        fn:function(){
            console.log(this.a); //undefined
        }
    }
}
o.b.fn();

复制代码

尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西。

还有一种比较特殊的情况,例子4:

复制代码

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;
j();

复制代码

这里this指向的是window,是不是有些蒙了?其实是因为你没有理解一句话,这句话同样至关重要。

  this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子4中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window,这和例子3是不一样的,例子3是直接执行了fn。

  this讲来讲去其实就是那么一回事,只不过在不同的情况下指向的会有些不同,上面的总结每个地方都有些小错误,也不能说是错误,而是在不同环境下情况就会有不同,所以我也没有办法一次解释清楚,只能你慢慢地的去体会。

 

构造函数版this:

function Fn(){
    this.user = "hello";
}
var a = new Fn();
console.log(a.user); //hello

  这里之所以对象a可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象a,为什么我说a是对象,因为用了new关键字就是创建一个对象实例,理解这句话可以想想我们的例子3,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a,那么为什么对象a中会有user,因为你已经复制了一份Fn函数到对象a中,用了new关键字就等同于复制了一份。

 

更新一个小问题当this碰到return时

复制代码

function fn()  
{  
    this.user = 'hello';  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined

复制代码

再看一个

复制代码

function fn()  
{  
    this.user = 'hello';  
    return function(){};
}
var a = new fn;  
console.log(a.user); //undefined

复制代码

再来

复制代码

function fn()  
{  
    this.user = 'hello';  
    return 1;
}
var a = new fn;  
console.log(a.user); //hello

复制代码

复制代码

function fn()  
{  
    this.user = 'hello';  
    return undefined;
}
var a = new fn;  
console.log(a.user); //hello

复制代码

什么意思呢?

  如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

复制代码

function fn()  
{  
    this.user = 'hello';  
    return undefined;
}
var a = new fn;  
console.log(a); //fn {user: "hello"}

复制代码

  还有一点就是虽然null也是对象,但是在这里this还是指向那个函数的实例,因为null比较特殊。

复制代码

function fn()  
{  
    this.user = 'hello';  
    return null;
}
var a = new fn;  
console.log(a.user); //hello

复制代码

知识点补充:

  1.在严格版中的默认的this不再是window,而是undefined。

  2.new操作符会改变函数this的指向问题,虽然我们上面讲解过了,但是并没有深入的讨论这个问题,网上也很少说,所以在这里有必要说一下。

function fn(){
    this.num = 1;
}
var a = new fn();
console.log(a.num); //1

  为什么this会指向a?首先new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

 

  注意: 当你new一个空对象的时候,js内部的实现并不一定是用的apply方法来改变this指向的,这里我只是打个比方而已.

  if (this === 动态的\可改变的) return true;

Star CCM+ 实战:旋风分离器网格加密策略与湍流模拟优化 本文针对Star CCM+中旋风分离器模拟精度不足的常见问题,深入剖析了网格质量的关键影响。文章重点介绍了通过局部网格加密策略,精准优化旋流核心区与入口区域的网格密度,从而在保证计算效率的前提下,显著提升湍流模拟的准确性与流场细节的捕捉能力,为工程实践提供了一套有效的优化方案。 阅读详情

相关推荐

网络协议——Modbus-RTU

网络协议——Modbus-RTU,简介、消息格式、Modbus寄存器种类说明、功能码01H、功能码02H、功能码03H、功能码04H、功能码05H、功能码06H、功能码0FH、功能码10H。

计算机硕士的博客 9904

【汇编语言】对类型操作符THIS的一些理解

【汇编语言】对类型操作符THIS的一些理解 作用:利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型。 关于类型操作符THIS,通俗来讲就是主要作用即为给同一存储单元取另一别名,如 w_var equ THIS word b_var db 10 dup (0) 所以这样看来,b_var和w_var其实指向了同一个内存地址。但是存在的不同是,两者类型可能不同。如上例中,b_var是字节类型而w_var是字类型。 mox ax, word ptr w_var mov ax,b_var 这二者

qq_45954736的博客 3359

手把手带你编写miniQMT实盘量化执行程序(3) | 交易系统

本文介绍了miniQMT实盘量化执行系统的核心交易系统代码,重点讲解了其模块化设计和工作流程。系统采用主控类LiveSystem管理交易全流程,包含初始化引擎、交易日判断、交易时段划分(开盘前、盘中、收盘等)、主循环调度和异常处理等核心功能。作者详细解析了系统如何实现365天不间断运行、精准判断交易日、分阶段执行交易策略等功能,并强调系统的稳定性和异常处理机制。

1306

彻底理解js中this的指向

首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题。   为什么...

weixin_30613343的博客 977

RenderDoc实战:5分钟搞定安卓Vulkan应用抓帧(含常见连接失败排查)

本文详细介绍了如何使用RenderDoc工具对安卓Vulkan应用进行抓帧分析,包括环境配置、完整抓帧流程及常见连接问题的解决方案。通过实战案例和高级技巧,帮助开发者快速定位渲染问题和性能瓶颈,提升移动图形开发效率。

weixin_28318011的博客 285

DDR为什么需要DQS信号?

本文根据相关书籍和个人经验,谈了一下对DDR中DQS信号作用的理解

weixin_41155581的博客 2万+

js 数据类型 隐式转换

JS的类型 原始值(primitives): undefined, null, booleans, numbers,strings, symbol(es6) 对象值(objects): Object 什么时候回出触发隐式转换?大概有几种情况 1. (==)比较 怎么转换 ,js高级编程给出以下 ①、如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而tr...

qq_27315289的博客 384

Ventoy引导自定义菜单配置详解:手把手教你用ventoy_grub.cfg启动硬盘里的Manjaro

本文详细解析了Ventoy引导自定义菜单配置方法,重点介绍如何通过ventoy_grub.cfg文件启动硬盘中的Manjaro系统。从Ventoy与GRUB2的协作原理到具体配置步骤,包括分区布局设计、关键参数解析及常见问题解决方案,帮助用户实现多系统引导的灵活管理。

weixin_28738165的博客 301

JavaScript中的this指向问题

JavaScript中的this是让很多开发者头疼的地方,而this关键字又是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 想要理解this,你可以先记住以下两点: 1:this永远指向一个对象; 2:this的指向完全取决于函数调用的位置; 针对以上的第一点特别好理解,不管在什么地方使用this,它必然会指向某个对象;确定了第一点后,也引出了一个问题,就是this使用的地方到底在哪里,而第二点就解释了这个问题,但关键是在JavaScript语言之中,一切皆对象,运行环境也

weixin_43758377的博客 1434

SDN — EVPN Overlay 控制面

完成控制面的配置后,当 VxLAN L2 Gateway(e.g. Leaf1)再收到从 Host1 向 Host2 发出的 ARP Request 时,就会先查看自己的 ARP 广播抑制表,发现有 Host2 的 MAC-IP 记录,则直接将 ARP Request 报文中的广播 MAC 地址替换为目的单播 MAC 地址(广播变单播),然后原路 Reply,从而达到 ARP 广播抑制的目的。手动配置的方式虽然简单,但网络中会存在大量的 BUM 洪泛流量,网络扩展性也受到了限制,并不适用于大规模组网场景。

烟云的计算 1859

uniapp - 强力解决H5网页浏览器跨域问题,如何解决uniapp请求接口在浏览器跨域问题,UniApp H5 跨域代理配置详细教程完美解决所有uniapp跨域(调用第三方接口或服务器api跨域)

uni-app 跨域,uniApp解决h5跨域问题,解决uni-app请求接口在浏览器跨域问题,uni.request请求跨域问题解决方案,uni-app-跨域解决方法,彻底解决uniapp发布为H5的跨域问题,uniapp H5页面设置跨域请求_uniapp h5跨域配置,uniapp开发 H5 解决跨域问题,uniApp请求解决跨域问题,uniapp request如何实现前端请求跨域,解决uniapp调试过程中的请求跨域和环境配置,Uniapp调用外部api接口跨域请求,uni-app发布H5页面跨域

🏆 前端领域优质创作者 5354

汇编语言---常用伪指令

汇编语言---常用伪指令   一、内存单元别名定义伪指令THIS 在程序中,如果需要以另外一种数据类型来访问同一存储单元时,可用强制类型转换操作符PTR来实现.但是,如果在程序中药经常以某种其它数据类型来访问同一存储单元的话,就必须在每次访问时都要加上强制

3851

【忍者算法】从生活案例理解滑动窗口最大值:一个超直观的思路讲解|LeetCode 239 滑动窗口最大值

点此看全部题解更多干货,请关注公众号【忍者算法】,回复【刷题清单】获取完整题解目录~

忍者算法的博客 632

【JS】Javascript中的this到底是什么

JavaScript中的this是一个对于新手来说特别吓人并且不友好的概念。对于一个前端萌新来说,这个概念既模糊,又看不到它存在的意义。本文将解析JavaScript中的this,并且逐一分析他在每个常见场景中的意义和指向。

a1611107035的博客 3273

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

一文看懂javascript(js)的this和Vue中的this

this是Javascript语言中的一个关键字,它代表函数运行时自动生成的一个内部对象,指当前对象,因此this只能在函数内部使用。随着函数执行环境的改变,this所指代的对象也会发生改变,但this始终指向的是调用函数的对象。简单来说就是谁调用了这个函数,this就指向谁(对象)。方法区别call既可以调用函数又可以传参数,参数只需用逗号隔开apply既可以调用函数又可以传参数,参数需要用一个数组进行包裹bind。

2301_76179969的博客 1733

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【JS】JavaScript中的this关键字

JavaScriptthis关键词指的是它所属的对象。thisthisthisthisthis像call()和apply()这样的方法可以将 this 引用到任何对象。

故余虽愚,卒获有所闻 1027

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【JS】JavaScript中的this详解

JavaScript中的this关键字详解 JavaScript中的this关键字是一个动态绑定的上下文对象,其值取决于函数调用方式。主要有四种绑定规则:1)默认绑定(全局对象或undefined);2)隐式绑定(调用对象);3)显式绑定(call/apply/bind);4)new绑定(构造函数实例)。箭头函数不绑定自己的this,而是继承外层作用域。使用优先级为:new绑定 > 显式绑定 > 隐式绑定 > 默认绑定。实际开发中需注意事件处理、回调函数中的this绑定丢失问题,可通过bi

qq_27579471的博客 478

javascript中的this,JS中this的几种基本指向

摘要:javascript中的this较为灵活,可以概括为一下四种类型1.this指向的是当前调用该函数的对象举例:function test(){ console.log(this)} //直接调用 test()// 输出对象为window,在nodejs中输出为global2 this指向的是对象属性。举例来说:var test={x:1, y:2 z:function(){ conso

liwusen的博客 1686

JS JavaScript中的this

this是JavaScript语言中的一个关键字 它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。 function test() {  this.x = 1; } 上面代码中,函数test运行时,内部会自动有一个this对象可以使用。 那么,this的值是什么呢? 函数在不同使用场合,this有不同的值。总之,this就是函数运行时所在的环境对象。 ...

weixin_30613433的博客 152

JavaScript中的this详解(彻底弄懂js中的this用法)!

要想学好js,那么其中那些特别令人混淆迷惑的知识点,就一定要弄清楚。this关键字就是其中让初学者比较迷惑的知识点之一,不过灵活运用this可以提升代码的性能和复用性,那么今天我就和大家一起来了解this的具体情况, 首先this作为关键字,它的作用就是引用,并且它通常只写在函数内部就是函数体内,在js中this的引用对象随着函数的使用环境变化而变化,好在具体的使用环境并不多,基本就四种。分别是...

weixin_33690367的博客 1386

JS中的this指向

this的概念: 在js中,this的意思为“这个;当前”,是一个指针型变量,它动态指向当前函数的运行环境。 在不同的场景中调用同一个函数,this的指向也可能会发生变化,但是它永远指向其所在函数的真实调用者;如果没有调用者,就指向全局对象window。 普通函数:关于this,谁调用就指向谁,没有调用者,就指向全局对象window。 箭头函数:箭头函数的this指向于函数作用域所用的对象。 一、全局环境下的this指向 在全局作用域下,this始终指向全局对象window,无论是否是严格

m0_55990909的博客 4万+

JavaScript中的this指向js中的this指向汇总

this

angrynouse的博客 417

html js 获取this,JavaScript中的this引用(推荐)

thisthis是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。一、定义1、this是函数内部的一个特殊对象(或this引用)--它引用的是函数据以执行的环境对象。2、this引用是一种在JavaScript的代码中随时都可以使用的只读变量。 this引用 引用(指向)的是一个对象,它有着会根据代码上下文语...

weixin_34393451的博客 1525

java script this_彻底理解javascript中的this指针

this关键字对于javascript初学者,即便是老手可能都是一个比较容易搞晕的东西。本文试图理顺这个问题。this和自然语言的类比实际上js中的this和我们自然语言中的代词有类似性。比如英语中我们写"John is running fast because heis trying to catch the train"注意上面的代词"he",我们当然可以这样写:"John is runnin...

weixin_36054993的博客 651

JS中的this详解

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

weixin_42321292的博客 1万+

JavaScript中的this

一、JS中的this: this的指向与this所处在的环境有关。 在JS中this的设计与其内存的数据结构有关。 <script> var object = { foo:function(){ alert(this.num) }, num:1 }...

weixin_41682828的博客 135
上一篇: OpenSessionInViewFilter配置导致数据库不能连接
下一篇: Servlet Listener原理
hello小先生
博客等级 码龄14年 2粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值