改变this指向的三种方法,call,apply和bind的区别与联系

SIwave串扰分析保姆级教程:从Allegro文件导入到结果解读,手把手教你排查PCB信号问题 本文提供SIwave串扰分析的详细教程,从Allegro文件导入到结果解读,手把手教你排查PCB信号问题。涵盖环境准备、参数配置、串扰扫描技巧及实战案例,帮助工程师精准定位和解决高速PCB设计中的串扰问题,提升信号完整性分析能力。 阅读详情

this指向(永远指向最后调用它的对象)

  • 一般直接调用函数时,this指向window。
  • 当事件调用函数时,this指向触发该事件的对象。
  • 而当调用对象的方法时,在函数中this指向拥有该方法的对象。
    但是

call( ),apply( ) 和 bind( ) 都是Function的方法,所有函数都有这三个方法。

1. 相同点

都用来改变this的指向

2.不同点

接收参数的方式不同

(1)call

形式:call (this要指向对象,传参逐个列举(可能多个))

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    function fn1(a,b){
        console.log(a+b);
    }
    function fn2(a,b){
        //下面的this指向调用call方法的fn1,即this指向fn1,且把age为1传给fn1中
       fn1.call(this,10,20); // 30
    }
    fn2(1,2);
    </script>
</body>
</html>
(2)apply

形式:apply(this要指向对象,arguments) 或 fn.apply(this要指向对象, 传参的数组)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    function fn1(a,b){
        console.log(a+b);
    }
    function fn2(a,b){
        // arguments把a,b的1,2传给fn1。
       fn1.apply(this,arguments); // 3
       fn1.apply(this,[20,30]); // 50
    }
    fn2(1,2);
    </script>
</body>
</html>
(3)bind

形式:bind(this要指向对象) 不会立即执行,并且返回一个改变this指向的函数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
    window.color = "red";
    var obj = {
        color: "blue"
    }
    function fn1(){
        console.log(this.color);
    }
    var a = fn1.bind(obj);
    //此时this指向obj.  this.color则为obj的属性blue
    a(); //blue
    </script>
</body>
</html>

所以,bind后函数不会执行,而只是返回一个改变了上下文的另一个函数,而call和apply是直接执行函数。若无参数,apply与call基本没什么区别

注意:在一般函数中,this在调用的时候才确定,但是在箭头函数中,一旦箭头函数定义,它的this就已经确定,且无法改变。箭头函数中的this指向离自己最近的非箭头函数作用域里。

傻瓜教程:使用GeoServer发布离线地图服务 一、离线地图下载 离线地图分为两种:一种叫“金字塔瓦片”数据,一种叫“矢量地图数据”。我们看的在线地图比如,百度,谷歌,高德等等网页上的地图,都是金字塔瓦片;另外一种是手机上用来导航的,比如高德地图APP,也可以下载离线地图数据,这个就是矢量的。 卫星影像地图都是金字塔瓦片,无矢量数据。 因此,我们所说的离线地图下载通常都是指离线地图金字塔瓦片数据下载。 离线地图金字塔瓦片搭建的离线地图服务分很多种:一般有WEB方式,TMS、WMTS/WMS等等,不同的应用有不同... 阅读详情

相关推荐

论文阅读4——一种宽频带圆极化微带天线的设计

论文阅读——一种宽频带圆极化微带天线的设计(现在才觉得开始弄懂了一点,懂了一点之后又更糊涂了……)

weixin_64612422的博客 2316

改变this指向的三个方法

改变this指向的三个方法 函数方法 有3个 1 call 2 apply 3bind(ES5新增) //call apply bind 都可以改变this指向 //其中 call和apply改变时是在函数执行的时候改变 bind改变时是在函数定义的时候改变 //定义一个函数实现两个数相加 function demo(a, b) { console.log(this); re

weixin_46500485的博客 3720

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1382

更改this指向的方法及其区别

今天给朋友们带来更改this指向的三种方法,以及它们的区别: 一:call用法 window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue'}; function changeColor () { console.log(this.color); } changeColor.call() //不传参数默认指向wi...

吴小迪的博客 4万+

Linux系统下Materials Studio 2020安装避坑指南:从依赖包到许可证配置全流程

本文提供了一份在Linux系统上安装Materials Studio 2020的深度避坑指南。详细解析了从系统依赖包检查、安装流程、许可证配置到Gateway服务部署的全过程,并分享了与Slurm作业调度系统集成的实战经验,旨在帮助用户高效、稳定地完成部署。

weixin_29313547的博客 386

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 263

详解改变this指向的三种方法的不同点和应用场景

call,apply是直接调用就可以改变;bind不是直接调用,需要再次调用一下才会执行。apply call不可以改变触发以后事件中的this指向。1) 相同点:都可以改变函数中的this指向。bind可以改变触发事件以后事件中的this指向。bind call 传递的时候什么值都可以。apply传递的必须是一个数组。

m0_71391416的博客 500

浅谈功放PA的VBW

摘要:VBW(视频带宽)反映功放的宽带非线性特性和记忆效应,影响数字预失真(DPD)校正能力。其成因是功放管寄生参数(如Cshunt和Leff)形成低频并联谐振,导致供电臂阻抗增大,引发电压波动和记忆效应。测试方法包括双音IM3/IM5测试(以两侧IM3差≥3dB定义VBW)和魔T测试(通过S21曲线测量谐振频率)。改善措施主要是减小Leff,如采用双电源平衡馈电。VBW指标要求通常为魔T测试结果大于3倍信号带宽,以确保功放线性度。

weixin_49761275的博客 1573

改变this指向的三个方法的用法及区别

call,apply和bind 作用:改变this的指向 function Person(age) { this.age = age; } var obj = {}; // Person(); Person.call(obj, 18); // 这两种执行是一样的,准确来说,上面的那种执行实际上就是下面的那种执行 // 在call传入obj会让Person里面的this全部替换成obj,相当于在最初的时候,Person里面的this全部指向window,现在都有了新的地址,就是obj的,从第二开始传

weixin_50948265的博客 3656

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理

本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。

y7z8a的博客 272

微信小程序——01开发前的准备和开发工具

微信小程序——01开发前的准备和开发工具

总裁余(余登武)博客 1万+

JS中this的指向与改变this指向的三个方法

事件绑定中的this指向,即该事件绑定在谁身上,this指向的就是哪个节点,继而可以通过this操作节点的样式、内容等。需要借用this的对象.call/apply/bind(借给别人this的对象,传参)方法作用就是永久的将某个对象中的this改变为另一个对象的this,改变之后原本的函数。不论是前辈们定义好的,还是自定义构造函数,其中的this指向的都是。在调用一个对象中的函数时,由于是通过对象调用,所以。因为函数是以回调函数的形式存在的,回调函数被window所调用。2)、将新函数中的this。

txl2498459886的博客 2000

HDR 人像肤色稳定实战:AE/AWB/ToneMap 冲突解耦与优先级裁决

人像 HDR 最容易“翻车”的就是**肤色飘**:AE 抢亮度、AWB 拉白点、TM 又在肩部压高光,三方各自“对”却合起来“错”。本文给出一套**工程可落地**的裁决策略:以**肤色 ROI 锚点**为最高约束,AE 先对脸部入射照度收敛,AWB 在**肤色先验 + 光源模型**下缓变,TM 采用**色相保持 + 中灰/肤色双锚**且时域一致化。配套**阈值与回归**(ΔE00、亮度漂移 RMS、频闪注入),把“主观对”的口径落到**可度量**,并给出逆光、多脸、霓虹等极端场景的**例外分流**。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1199

js三种改变this指向的方法call、apply、bind及区别

call()方法 1、第一个作用可以调用函数,第二个可以改变函数内this的指向 2、call 主要作用可以实现继承 var o = { name: "andy" } function fn(a, b) { console.log(this); //指向 对象o console.log(a + b); }; fn.call(o, 1, 2); 实现子类对父类的继承

weixin_45955339的博客 583

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

js高级-this指向问题,改变函数内部this指向的三种方法 call() apply() bind() 及区别

1.this指向问题 1.普通函数 this指向window function fn(){ console.log('普通函数的this'+ this); } window.fn() 2.对象的方法 this指向的是对象o var o = { sayHi:function fn(){ console.log('普通函数的this'+ this); } } o.sayHi(); 3.构造函数 this指向ldh这个实例对象 原型对象里面的this指...

qiaoyangla的博客 518

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

js中call(),apply(),bind()三种改变this指向方法的区别

apply方法 apply方法接收两个参数,第一个参数是this的指向,第二个参数是函数接收的参数,以数组的形式传入,切当第一个参数为null或undefined时,函数的this会默认指向window,使用apply方法改变this指向后原函数会立即执行,且此方法只是临时改变this指向一次。 //定义一个Person类 class Person { constructor(name, age) { this.name = name; this.age = a

weixin_46389390的博客 419

温度PID控制PLC程序

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

JS 中改变函数的this指向,call,apply,bind方法的使用和区别

JS 中改变函数的this指向,call,apply,bind方法的使用和区别 1. 普通函数调用,此时 this 指向 window function a() { console.log(this); // window } a(); 2.构造函数调用, 此时 this 指向 实例对象 function Person(age, name) { this.age = age; this.name = name console.log(

web2001chu的博客 1872

javascript之this指向和apply,call,bind三者的区别

一、前言 this指向,apply,call,bind的区别是一个经典的面试问题,同时在项目中会经常使用到的原生的js方法。同时也是ES5中的众多坑的一个。ES6中可能会极大的避免了this产生的错误,有时候需要维护老的项目还是有必要了解一下this的指向和apply,call,bind三者的区别。 二、this的指向 在ES5中,其实this的指向,始终坚持一个原理:this永远指向...

saucxs 191

call , apply, bind, 的区别

apply和call都是为了改变某个函数运行时的上下文而存在的 (就是为了改变函数内部this的指向); 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及其以后的参数都是数组里面的元素,就是说要全部列举出来; bind() 也是改变函数体内this的指向; bind会创建一个新函数,称为绑定函数,当调用这个函数的时候,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个及以后的参数加上绑

weixin_48895522的博客 3787

call、apply、bind三者为改变this指向的方法

call、apply、bind三者为改变this指向的方法 共同点:第一个参数都为改变this的指针。若第一参数为null/undefined,this默认指向window call(无数个参数) 第一个参数:改变this指向第二个参数:实参使用之后会自动执行该函数 function fn(a,b,c){ co...

weixin_34363171的博客 137

改变 this 指向的三种方法 call() apply() bind()

改变 this 指向 的三种方法 call() apply() bind()

lqc0410的博客 354

js 改变this指向

js 改变this指向 call() apply() bind()

哈哈绝的博客 497

call apply bind 改变this指向的三种方式的异同

改变this指向三种方法 1,call方法 //1,call() let o = { name: 'red', } function fn(a, b) { console.log(this); console.log(a + b); } fn.call(o, 1, 2) //调用函数,改变this指向, 最前面的参数是改变的this指向,后面的是传递参数

weixin_44134588的博客 333

js如何改变this指向(含三种方法详细介绍)

在前文中提到this指向问题 怎样改变this指向呢 以下三种方法均可改变this指向 1.call() 第一个参数:this指向 如果要传参,后面依次是参数,例: function fn(x,y){ console.log(this); } var obj = { name:"zs" } ...

weixin_44021199的博客 5225

call,apply,bind三者的区别

1、本质上的区别三者最大的区别是call和apply会改变this的指向并且立即执行函数,但是bind方法不会立即执行函数,而是会返回this改变后的函数。 let obj = { name:'张三', age:18, func:function(){ console.log(this.name + "年龄" + this.age); } }

qq_55928824的博客 5279

ES5中改变this指向的三种方法

ES5中提供了三种改变函数中this指针指向的方法,分别如下 1.call() var obj = {username:"孙悟空"}; //没有任何修饰的调用函数,函数中的this指向全局对象,此处为window function foo(para1,para2){ console.log(this,para1,para2) } //利用call()改变foo函数中this的指向,让它指向obj...

weixin_42560017的博客 752
上一篇: cookie,localStorage和sessionStorage以及session的区别与联系
下一篇: js中函数重载详解以及两种实现方式
apple_2021
博客等级 码龄8年 1529粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值