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

SAP PPDS启发式排产实战:从零配置到自定义规则开发(附ABAP代码示例) 本文详细介绍了SAP PPDS启发式排产的实战应用,从基础配置到自定义规则开发的全流程。通过ABAP代码示例,展示了如何实现多目标优化、实时响应和约束可视化,帮助企业提升订单交付率、减少设备闲置时间。文章还包含开发环境准备、标准模板解析、自定义开发步骤及性能优化技巧,适合制造业数字化转型的实践参考。 阅读详情

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指向离自己最近的非箭头函数作用域里。

在 FreeStyle SAP UI5 应用里优雅落地 Draft 草稿机制:用 DraftManager 封装 DraftController 的一套实战套路 SAP Fiori应用中,Draft草稿机制是解决业务中断、多人协作和长表单填写等痛点的核心能力。本文提出了一套针对FreeStyle SAP UI5应用的Draft管理方案,通过封装sap.ui.generic.app.transaction.DraftController为DraftManager服务类,将复杂的草稿操作逻辑集中管理。该方案实现了草稿的创建、激活、丢弃等核心功能,使控制器只需调用简单意图式API即可完成操作,同时解决了组件化架构下的上下文切换、统一错误处理等问题。文章还详细介绍了后端Dr 阅读详情

相关推荐

从数据到图片:手把手构建FMCW雷达人体行为识别数据集(行走、跌倒、喝水等6类动作)

本文详细解析了如何利用FMCW雷达构建人体行为识别数据集,涵盖行走、跌倒、喝水等6类动作。通过多普勒特征可视化、图像标准化处理和自动化流水线设计,将原始雷达信号转化为高质量时频图像数据集,为智能家居和健康监护等应用提供可靠数据支持。

weixin_30706691的博客 384

改变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

3GPP LTE/NR信道模型

CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。

LinkEverything的博客 1万+

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

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

吴小迪的博客 4万+

机器学习与深度学习基础概念

本篇主要介绍机器学习主要概念,包括不限于标签、特征、样本、训练、模型、回归模型、分类模型、泛化、过拟合、预测、平稳性、训练集、验证集、测试集。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 3万+

Android15音频进阶之AudioReach架构agmcap bringup调试(一百二十三)

本篇目的:Android15音频进阶之AudioReach架构agmcap录音调试。

Android系统攻城狮 2229

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

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

m0_71391416的博客 500

Android16 rk3576添加触摸点数上限到40个点

本文介绍了在Android 16系统上实现40点触摸支持的修改方案。相比Android 15,Android 16对API添加有更严格的要求,需要在MotionEvent.java中添加@FlaggedApi批注。主要修改包括:1)在input_framework.aconfig中定义flag;2)在MotionEvent.java中添加40个AXIS_GENERIC轴常量并添加批注;3)将32位指针ID处理改为64位适配;4)更新相关API文档。修改涉及多个核心文件,包括PointerController

tzj1058756809的博客 381

改变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

基于STM32的智能电子秤设计毕业论文

摘要:本文设计了一款基于STM32F103C8T6的智能电子秤系统,通过HX711称重传感器实现高精度测量,采用OLED显示和矩阵键盘完成人机交互。系统包含重量采集、数据处理、单价设置、去皮清零及总价计算等功能模块,经测试测量误差小于0.1%,稳定性良好。研究实现了低成本、高可靠性的智能称重方案,为后续无线传输和AI算法集成奠定了基础。关键词:STM32;智能电子秤;HX711;OLED显示;矩阵键盘。

3254968421的博客 847

AD(十四)调用已有的PCB元件封装库

软件:Altium Designer 16 需要资料:已有的PCB原理图文件(.PCBDOC)或者PCB库文件(.PCBLIB)(来源文中细说) 调用已有的PCB元件封装库(一)从已有的PCB原理图文件(*.PCBDOC)中调用1、PCB原理图文件来源2、打开已有的PCB原理图文件(*.PCBDOC)3、生成PCB封装库4、复制封装到工程文件下的PCB库文件(*.PCBLIB)5、重名问题(二)从已有的PCB库文件(*.PCBLIB)中调用1、PCB库文件(*.PCBLIB)的来源2、打开已有的PCB库 (

Curnane0_0的博客 5082

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

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

txl2498459886的博客 2000

SAE ARP 4761A内容详解

SAE ARP 4761A主要为民用航空系统及设备的安全评估提供指南,帮助制造商和设计者满足FAA的FAR 25.1309等适航标准的要求。该文档旨在为航空器和航空系统设计中涉及的安全评估流程提供一个结构化的框架,并结合一系列工具和方法,如故障树分析(FTA)、依赖图分析(DD)、马尔可夫分析(MA)等,来系统地评估潜在的安全隐患。这一标准不仅适用于大型航空器的设计和评估,还可以应用于各种类型的飞行系统,如无人驾驶飞行器(UAV)和新型的电动垂直起降飞机(eVTOL)。

qq_41854911的博客 3147

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

老版QQ原生表情gif动态

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

call、apply、bind函数在改变函数运行时this的指向问题的区别

首先,call、apply、bind都可以改变函数运行时this的指向问题 <script> var value = "王1"; var obj = { value: "开2", friend: { value: "贵3", sayHi: function () { console.log(this.value); } } }; obj.friend.sayH...

前端-尔嵘 2999
上一篇: 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、付费专栏及课程。

余额充值