关于 apply,call 和 bind 的理解

深入理解JavaScript中的call、apply、bind方法的区别 在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply 和bind这三个方法,来改变函数体内部 this 的指向,因为函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念 apply、call apply:应用某一对象的一个方法,用另一个对象替换当前对象 call:调用一个对象的一个方法,以另一个对象替换当前对象 function person() {} person.prototype = { attr: {age:18,sex:' 立即下载

apply、call 和 bind 的理解

apply、call 和 bind 都可以改变当前函数 this 的指向。但是 apply 传的参数时一个数组,call 传的参数是一个序列。bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

  • apply的使用  

    1. 基本使用,apply 将 Function 中的 this 指向了 newObj 这个对象,args 参数是传给 newObj 中的 Function 的参数,call 类似。

      Function.prototype.apply(newObj,[arg1,arg2,arg3])  
    2. 求一个数组的最大值,在非严格模式下,此时的 null(undefined)是JS执行环境的全局变量window,因为 Math.max( ) 不支持数组,所以此时用 apply 函数时,传入Math.max( ) 中的参数为数组中的值,而不是整个数组。

      Math.max.apply(null,[1,2,3])    
    3. 数组合并
      Array.prototype.push.apply(array1, array2)
  • call 的使用

    1. 基本使用

       Function.prototype.apply(newObj, arg1,arg2,arg3)  
    2. 类数组的用法,将类数组变为数组

       Array.prototype.slice.call(arguments)
       Array.prototype.slice.call(document.getElementsByTagName("*"))
  • bind 的使用

    1. 基本使用

       Function.prototype.bind(newObj)  
  • 补充
    call 的性能比 apply 好,因为 apply 的参数是一个数组,会多一次引用访问,而且需要将其遍历合并到arguments隐式参数数组上。

如果有什么不正确的地方,欢迎大家批评指正

参考文档
http://www.cnblogs.com/coco1s/p/4833199.html

第47节:cesium 热力图效果(含源码+视频) cesium 热力图效果 阅读详情

相关推荐

异步复位同步释放:如何确保复位信号的可靠性与时序安全

本文深入探讨了异步复位同步释放技术在数字电路设计中的关键作用,详细分析了复位信号的可靠性与时序安全问题。通过对比异步复位与同步复位的本质区别,揭示异步复位的优势与潜在风险,并提供了标准的Verilog实现方案。文章还涵盖了多时钟域下的复位同步策略、复位网络时序约束方法以及实际工程中的经验教训,为数字系统设计者提供了全面的复位信号处理指南。

weixin_29213655的博客 399

call ,apply和bind方法 详解

JavaScript 函数call、apply和bind的区别和用法详解

3万+

Python爬虫实战:5分钟搞定慢慢买历史价格查询(附完整代码)

本文提供了一份Python爬虫实战指南,教你如何快速编写脚本自动查询慢慢买网站的商品历史价格。文章详细拆解了环境准备、接口分析、核心代码实现及常见问题应对,并附有完整代码,帮助读者将爬虫技术应用于日常比价,实现高效购物决策。

weixin_29053577的博客 1009

bind、call、apply的区别、实现逻辑?手写实现 bind、call、apply方法

函数内部使用 apply 来绑定函数调用,需要判断函数作为构造函数的情况,这个时候需要传入当前函数的 this 给 apply 调用,其余情况都传入指定的上下文对象。call 和 apply 会立即执行函数,而 bind 不会执行函数,而是返回一个改变了 this 指向的新的函数。本质都是为了改变函数运行时的执行上下文,使得函数在执行过程中的 this 值得到绑定并且传入指定的参数。而 apply 是传入一个数组。将待执行的函数作为上下文对象的属性,巧妙的改变了 this 的指向,并且立即指向该函数。

小草莓的博客 3218

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 298

AI时代,程序员何去何从?别慌,看完这篇你就明白了

AI时代程序员的发展方向 摘要:随着AI代码助手的普及,程序员行业面临变革。本文通过实际案例展示AI写代码的能力与局限:AI能生成基础功能代码(如RESTful API、数据处理脚本),但缺乏业务理解、系统设计和复杂逻辑处理能力。程序员的核心价值在于需求分析、架构设计、性能优化等高层能力。未来程序员应: 掌握AI工具提升效率 专注于创新和架构设计 培养业务理解能力 持续学习新技术 AI不会取代程序员,但会淘汰不会使用AI的程序员。建议开发者拥抱AI工具,将其作为助手而非威胁,聚焦高价值工作。

yunque_xianguang的博客 907

(面试题)请问call,apply和bind的区别

请问call,apply和bind的区别? 一、相同点 这三个函数都可以改变函数里的this指向。在这三个函数的第一个参数就是this对象。 二、不同点 1、bind: 调用bind时,并不会执行原函数,而会产生新的函数。新的函数调用时,才会执行原函数的代码。 2、call和apply 相同点: 调用call和apply时,会执行原函数,不会产生新的函数。 不同点 1)、apply: 第二个参数是数组,数组是原函数的参数 2)、call: 从第二个参数开始朝后的所有参数,是原函数的参数 <!DOCTY

qq_44417271的博客 5036

【数据集】2019年中国1km格网河网密度数据集

中国1km格网河网密度数据集

WW、forever的博客 1343

「干货」细说 call、apply 以及 bind 的区别和用法

前言 上一篇文章 《「前端面试题系列4」this 的原理以及用法》 中,提到了 call 和 apply。 它们最主要的作用,是改变 this 的指向。在平时的工作中,除了在写一些基础类,或者公用库方法的时候会用到它们,其他时候 call 和 apply 的应用场景并不多。 不过,突然遇到的时候,需要想一下才能转过弯来。所以今天,就让我们好好地探究一下,这两个方法的区别以及一些妙用。最后,还会介绍...

weixin_34240520的博客 538

NPU性能榨取手把手教程:RK3588上YOLOv5s多线程部署与120FPS极限探索

RK3588 YOLOv5s多线程部署优化指南 本教程深入解析RK3588芯片上YOLOv5s模型的高性能多线程部署方案。RK3588作为瑞芯微旗舰AIoT芯片,内置三核NPU(6TOPS算力)和硬件加速器(RGA/VPU),为AI推理提供强大支持。通过线程池技术,我们将视频处理的读取、推理、后处理等环节解耦并行,显著提升系统吞吐量。教程详细介绍了从PyTorch到RKNN格式的模型转换流程、INT8量化方法,以及基于RKNN C++ SDK的YOLOv5推理核心实现,帮助开发者最大化发挥RK3588的AI

LXY_LOVE36的博客 973

C/C++基础讲解(四十三)之图形篇之绘制直线、圆、圆弧、 椭圆

程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:绘制直线 实例2:绘制圆 实例2:绘制圆弧 实例2:绘制椭圆

hnjzfwy的博客 1234

call、apply和bind方法的学习

bind、call、apply都是用来指定一个函数内部的this的值, 先看看bind、call、apply的用法。

m0_53874326的博客 252

jre9下载 jdk9

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

JavaScript进阶 —— 深入理解 call,apply 和 bind

在JavaScript 中,call、apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果。本文将对这三个方法进行详细的讲解,并列出几个经典应用场景。1、call。

金戈鐡馬 3867

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

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

怎么理解call,apply和bind的作用和区别?自己手动实现call,apply和bind.

怎么理解call,apply和bind的作用和区别? call,apply,bind都是用来改变this的指向 call和apply的区别传入的参数方式不相同,bind是返回一个新的函数,再执行调用。 首先看一下用法 function fn(a, b) { console.log(a, b, this, arguments.length); return a, b } const obj = { m: 3 } .

写点什么好 399

理解 call、apply、bind 原理,手写简单的 call、apply、bind 方法

手写apply、call、bind方法。彻底理解apply、call、bind原理。

qq_44900902的博客 461

对call,apply,bind的理解

常用的改变this指向的方法有call,apply,bind:

Healer000000的博客 203

call, apply, bind理解

先看几个有趣的题: function fn1(){ console.log(this, 1); } function fn2(){ console.log(this, 2); } fn1.call(); //输出 window 1 fn1.call(fn2); //输出 fn2 1 fn1.call.call(fn2); //输出 window 2 amazin...

weixin_43152527的博客 268

apply、call、bind的用法和理解

1.apply方法调用一个函数,其具有一个指定的this值,参数为数组或者类数组的对象。 2. 1. call(obj, param1, param2)/apply(obj, [param1, param2]) 调用/执行函数只是强制指定函数中的this为第一个参数指定的对象如果函数执行需要传参数, call是依次传递, apply需要封装成数组传递 2. bind() 返回一个新函数, 不会自动执行, 需要手动执行强制指定函数中的this为第一个参数指定的对象...

weixin_45392559的博客 855

javascript中的 bind、apply和call的理解

这三个函数在实际使用中 可能会产生意想不到的好效果 基本理解: func.bind(context, arg1, arg2, …) 这个函数 会返回一个新函数,新函内的上下文 “this”,会被bind()中的第一个参数代替,新函数的函数参数,会被bind()函数的第二个参数及后续参数 一一替换 理解第一步: var func = function() { console.log(this)...

Applosl的博客 184

new、call、apply、bind实现的原理,是你理解的那样吗?

前言 在项目开发过程中,对于函数封装时,在调用函数内部方法时,有可能是window调用这时就会报错,常使用call,apply,bind来绑定this指向。 new的实现 当我们用new实例化一个构造函数,生成一个实例对象时,你想知道new到底做了什么吗? 来,客官里边请! 其实,它做了五件事: 获取构造函数 创建一个新对象 将函数的作用域赋给新对象(这里实际上就是生产了一个新的上下文) 执行函...

Greenhand_BN的博客 282

关于call、apply、bind的理解。

关于call、apply、bind的部分理解

weixin_43660344的博客 214

call、bind、apply的理解

call、bind、apply的来源 call、apply和bind方法其实都是继承自function.prototype中,属于实例方法。 console.log(Function.prototype.hasOwnProperty('call')); console.log(Function.prototype.hasOwnProperty('apply')); console.log(Function.prototype.hasOwnProperty('b

weixin_49920110的博客 417

JavaScript中bind、apply、call的理解

JavaScript中bind、apply、call的理解

GLimerence的博客 1480

对于call,apply,bind 的理解

JavaScript 中 call()、apply()、bind() 的用法 之前对与JavaScript中的call,apply,bind这几个方法一直理解的很模糊,今天总结一下。 例1 var name = '小王', age = 20; var obj = { name: '小张', objAge: this.name, ...

weixin_30832351的博客 153

bind、apply、call的理解

一直感觉代码中有call和apply就很高大上(看不懂),但是都草草略过,今天非要弄明白!以前总是死记硬背:call、apply、bind 都是用来修改函数中的this,传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。bind是改变this后返回一个新的函数,他不会立即执行。死记...

weixin_30518397的博客 79

对call、apply和bind的理解及他们的区别

说明 每个函数都包含两个非继承而来的方法,call()和apply(),其作用都是用来改变函数的执行环境。 call/apply/bind方法的来源 call、apply和bind方法其实都是继承自function.prototype中,属于实例方法。 console.log(Function.prototype.hasOwnProperty('call')); console.log(Function.prototype.hasOwnProperty('apply'));

reaaal的博客 650
上一篇: 计算机网络
下一篇: 关于 setTimeout 和 setInterval 的理解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值