this指向

英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM 1. 概述 随着汽车上通信系统越来越复杂,云端远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车上。但通常这类加解密算法都需要大量的数学运算,需要消耗很多CPU时间和资源,汽车上的ECU又有比较高的实时性要求,为了节省主CPU的资源,HSM应运而生。 HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的一个外设,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如 阅读详情


this:执行上下文,this一般存在于函数中,表示当前函数的执行上下文,如果函数没有执行,那么this没有内容,只有函数在执行后this才有绑定。

this执行的位置

  1. 默认执行:this指向window,严格模式指向undefined
    非严格模式下
 function fn(){
        console.log(this);    // window
    }
 fn();

``

在这里插入图片描述
          严格模式下

 function fn(){
        "use strict";
        console.log(this);   //undefined
    }
 fn();

在这里插入图片描述

  1. 通过对象执行(通过上下文对象执行,隐式执行):obj.fn():当前的执行对象
    下面案例中的this,如果fn直接执行时,this的执行是调用它的fn(),但是创建了一个对象obj,在obj中有一个对象b,通过对象obj.b()执行该函数,那么此时的this就是执行它的直接父级obj对象,所以此时的this的输出就是下面显示的结果。
function fn(){
    console.log(typeof this);     //object
    console.log(this);       

var a = 10;
var obj = {
    a:20,
    b:fn
}
obj.b();

在这里插入图片描述

  1. 显式执行(通过函数的方法bind执行):指定的是谁,就是谁
    找回隐式丢失的this,其实就是使用显式执行,强行绑定
    通过bind方法强行将this执行window。关于bind方法将在下面详细介绍。
 function fn(){
      console.log(this);
 }
 var f = fn.bind(window);
 f();

在这里插入图片描述

  1. 使用构造函数执行(通过new执行)
    在构造函数或者构造函数原型对象中 this 指向构造函数的实例

    这里通过构造函数的方式,利用new关键字创建了一个对象实例,将这个this指向这个对象a,我们这里用变量a创建了一个Fn的实例(相当于复制了一份Fn到对象a里面),此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象a,那么this指向的自然是对象a,那么为什么对象a中会有user,因为你已经复制了一份Fn函数到对象a中,用了new关键字就等同于复制了一份。

function Fn(){
    this.user = "小张";
}
var a = new Fn();
console.log(typeof a);   //object
console.log(a.user);   //小张

在这里插入图片描述
注:当this碰到return时

来看看几个例子

function fn()
{
    this.user = "小张";
    return {};
}
var a = new fn();
console.log(a.user);    //undefined
function fn()
{
    this.user =  "小张";
    return 1;
}
var a = new fn();
console.log(a.user); // 小张
function fn()  
{  
    this.user = "小张";  
    return undefined;
}
var a = new fn;  
console.log(a.user);  //小张
function fn()  
{  
    this.user =  "小张";  
    return undefined;
}
var a = new fn;  
console.log(a);      //fn {user:  "小张"}
function fn()  
{  
    this.user ="小张";  
    return null;
}
var a = new fn;  
console.log(a.user); //小张

那么这几个例子表示什么意思呢?
如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。还有一点就是虽然null也是对象,但是在这里this还是指向那个函数的实例,因为null比较特殊。

bind()、call()和apply()的关系

  • apply()
    使用 apply, 你可以继承其他对象的方法:
    在 JavaScript 严格模式下,如果 apply() 方法的第一个参数不是对象,则它将成为被调用函数的所有者(对象)。在“非严格”模式下,它成为全局对象。
    注意这里apply()的第一个参数是null,在非严格模式下,第一个参数为null或者undefined时会自动替换为指向全局对象,apply()的第二个参数为数组或类数组。

  • call()
    call()是apply()的一颗语法糖,作用和apply()一样,同样可实现继承,唯一的区别就在于call()接收的是参数列表,而apply()则接收参数数组。

  • bind()
    bind()的作用与call()和apply()一样,都是可以改变函数运行时上下文,区别是call()和apply()在调用函数之后会立即执行,而bind()方法调用并改变函数运行时上下文后,返回一个新的函数,供我们需要时再调用。

 var name="小王",age=17;
   var obj={
       name:"小张",
       objAge:this.age,
       myFun:function(fm,t){
           console.log(this.name+"年龄"+this.age,"来自"+fm+"去往"+t);
       }
   };
   var db={
         name:"小红",
         age:36
     };
     obj.myFun.call(db,"上海","淮南");
     obj.myFun.apply(db,["上海","淮南"]);
     obj.myFun.bind(db,"上海","淮南")();
     obj.myFun.bind(db,["上海","淮南"])();

在这里插入图片描述
从上面四个结果不难看出:
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,‘成都’, … ,‘string’ )。
apply 的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,[‘成都’, …, ‘string’ ])。
bind 除了返回是函数以外,它 的参数和 call 一样。
当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

如何选用

如果不需要关心具体有多少参数被传入函数,选用apply();
如果确定函数可接收多少个参数,并且想一目了然表达形参和实参的对应关系,用call();
如果我们想要将来再调用方法,不需立即得到函数返回结果,则使用bind();

总结

call()、apply()和bind()都是用来改变函数执行时的上下文,可借助它们实现继承;
call()和apply()唯一区别是参数不一样,call()是apply()的语法糖;
bind()是返回一个新函数,供以后调用,而apply()和call()是立即调用。

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo OrangePi Kunpeng Pro 的优点很明显,内置openEuler,配备PD电源,做到开箱即用;板子设计也不错,风扇噪音不大,散热良好,昇腾芯片又确保小板子的性能,接口丰富是这类板子共同的优点,也很好的继承了下来,甚至还可以外接固态,可靠性大大提升。使用起来,哪怕不用openEuler的话,也可以很方便的刷Ubuntu来实现一些需要依赖的开发工作,这次没有跑AI模型,所以对算力的优势还没有很明显的感受,下次可以试一下yolo跑跑看。 阅读详情

相关推荐

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3316

C++线程介绍

thread>头文件声明了 std::thread 线程类及std::swap(交换两个线程对象)辅助函数。另外命名空间也声明在头文件中。下面是 C++11 标准所定义的头文件摘要:参见 N3242=11-0012 草案第 30.3 节 Threads(p1133)。头文件主要声明了类,另外在命名空间中声明了get_idyield以及sleep_for等辅助函数,本章稍微会详细介绍类及相关函数。

谢谢大家的关注 2094

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 741

基础讲解--this指向、call、apply、bind改变this指向方法

本文帮助你了解this在不同函数中分别指向的是谁,以及call、apply改变this指向的区别

lxm1353723767的博客 472

STM32实现薄膜压力传感器数据采集(标准库和HAL库实现)

薄膜压力传感器采集压力数据

XiaoCaiDaYong的博客 3万+

从零构建物联网数据中台:MQTT协议、Node.js服务、MongoDB与InfluxDB双存储及React可视化实战

本文详细介绍了从零构建物联网数据中台的完整实战方案。通过采用MQTT协议作为设备通信标准,结合Node.js搭建高并发数据处理服务,并创新性地使用MongoDB与InfluxDB双存储架构分别管理设备元数据与海量时序数据,最后利用React构建了实时数据可视化控制台。该架构有效解决了物联网项目中数据异构、查询性能低下等核心痛点,为构建高效、可扩展的物联网平台提供了清晰路径。

weixin_28432777的博客 288

深入理解this

目录1. 执行上下文(1)执行上下文概念(2)创建执行上下文2. this 指向(1)默认绑定(全局环境)(2)隐式绑定(上下文对象)(3)显示绑定(apply、call、bind)(4)new绑定(构造函数)(5)箭头函数中的this(6)数组方法中的this3. this 优先级 1. 执行上下文 说到this,就不得不提执行上下文,下面就先来看看执行上下文的概念。 (1)执行上下文概念 执行上下文是评估和执行 JavaScript 代码的环境的抽象概念,当 JavaSciprt 代码在运行时,其运行在

公众号:前端充电宝 710

Mplus实战:如何用潜在类别分析(LCA)快速搞定心理学数据分类?

本文详细介绍了如何运用Mplus软件进行潜在类别分析(LCA),以快速处理心理学数据并识别内部异质性群体。文章从数据准备、Mplus语法编写、模型拟合与选择,到结果解读与高级应用(如纳入协变量),提供了完整的实战指南,帮助研究者从变量视角转向个体视角,有效挖掘数据中的潜在子类别。

weixin_28318011的博客 410

new fn() 做了什么

1. 函数的多重用途 函数可以搭配new使用,函数内部的this会指向一个新对象,最终函数会返回这个新对象 function fn(){ this.count = 1 } const obj = new fn() // {count: 1} fn() // undefined 全局对象上会添加一个属性count,值为 1 复制代码 js函数有两个不同的内部方法:[[Call]]和[[...

weixin_34062469的博客 689

体系结构学习-6-超标量处理器

 MIPS32-5段流水线采用了指令级并行方式(5个流水段同时运行5条指令)提升系统吞吐率,是一种标量处理器(CPI≥1CPI \ge 1CPI≥1),但是一个周期一条指令以及无法满足现代计算机需求了。 超标量处理器(Superscalar) 1、基本思想:增强指令集并行,让每个周期执行更多指令,实现 CPI<1CPI<1CPI<1 。(IPC=1/CPIIPC = 1...

qq_40891899的博客 1213

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 447

this指向,防抖函数中的fn.apply(this,arguments)作用

1.介绍:首先我们要了解apply()的基本知识,apply()和call()都是每个函数或对象都拥有的非继承的方法。 2.作用:都是用来改变this的指向的 3.下面介绍带参数和不带参数的常见的应用 首先想很好理解和应用apply,其根本是对于this的理解。 this的三种指向:1.指向this所在函数的直接调用者,2.new的时候,指向new出来的对象,3.事件中指向当前的出发对象 总结:t...

weixin_44494811的博客 1万+

【ACP】2025-最新-疑难题解析- 练习二汇总

全球加速是优化公网访问的,负载均衡是分发流量的,公网 NAT 网关是处理公网 IP 的,高速通道是建私网连接但不直接提供固定私网地址功能。C 是客户端加密方式,D 是 ECS 云盘加密,都不属于 OSS 服务器端加密。某企业想使用云服务器 ECS + 负载均衡 SLB + 弹性伸缩 (Auto Scaling) 的架构搭建一个企业级门户网站,技术负责人对于负载均衡和弹性伸缩配合使用没有经验,于是将他理解的两种产品配合使用的一些技术细节列成了一个表单,并请作为架构师的您帮他做一下鉴别,以下哪些项是正确的?

jundao1997的专栏 293

this 指向

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

qq_62597228的博客 1849

数学建模模型总结

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

this指向及改变this指向的方法

原先总结过this指向问题,但看了大佬们写的之后,觉得自己遗漏了很多点,所以,结合大佬们的,重写一遍 一、函数的调用方式决定了 this 的指向不同: 普通函数调用,此时 this 指向 window function fn() { console.log(this); // window } fn(); // window.fn...

李天下 5万+

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

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

this的指向

this的指向在很多时候会把人弄的很懵,但是笔者可以肯定的说,你看完这篇文章绝对能弄懂this的指向。 在不同的场景this分别指向谁: 一:纯粹的函数调用 var x = 1; function test() { console.log(this.x) //指向window,输出1 } test() //这个其实是window.test()的简写 此时是window调用的test方法,所...

吴小迪的博客 4万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【JavaScript】this 指向

① 默认绑定:在全局中声明的变量和函数(默认指向Window);函数独立调用时(声明式函数、匿名函数 / 赋值式的方式、闭包)(都是指向Window);立即执行函数、 setTimeout、setInterval 指向 window对象调用(也就是谁调用就是指向谁,所以就是指向调用这个函数的对象)(存在隐式丢失的问题:函数赋值和参数赋值的情况);绑定的事件处理函数(指向的是绑定事件处理函数的标签);(指向第一个参数)构造函数中的this指向实例化出来的对象;

athicket 1609

深入辨析JavaScript的this指向

outerFunc是在运行时才能确定this指向,那么innerFunc如何在定义时就能确定this的值呢?// this 继承自 outerFunc 的 this// 输出: Window {...}(非严格模式)或 undefined(严格模式)事实是:innerFunc的this静态绑定了 outerFunc的this 的引用!在onterFunc定义时,innerFunc的this并不是一个独立的值,而是直接指向 onterFunc的this。

weixin_58843362的博客 2019

js中this的指向?改变this指向的办法?

三者都可以改变函数的this对象指向三者第一个参数都是this要指向的对象,如果没有这个参数或参数为undefined或null,则默认指向全局window三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入bind是返回绑定this之后的函数,apply、call 则是立即执行。

Cherryyyyyyyyyy的博客 984

This指向问题

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

Andrew_gz的博客 1665

JavaScript基础——this指向

当一段 JavaScript 代码在运行的时候,它实际上是运行在执行上下文中。

qmzhna_的博客 1305

关于对象中的this指向和修改this指向问题。

修改this指向 修改this指向有三个方法(call,apply,bind),三个方法的第一个参数都是修改的指向的内容(对象名、对数组名等)。 1.call方法。该方法的后面可以有很多参数,除第一个指向的地方外(调用的就是指向的位置的值内容),后面的参数都是数值数字等类型依次排列(当然,这些参数也可以根据情况省略)。 eg1: var arr = [12, 56, 48, 25, 35, 64,...

weixin_45103372的博客 1172

关于this的指向问题

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

liujiebahuang的博客 325

js中this的指向(彻底理解js中this的指向,不必硬背)

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

qq_60060362的博客 1012
上一篇: vue.js简介
下一篇: JS笔记
伦为JAY下囚
博客等级 码龄7年 52粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值