我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JS中call()、apply()和bind()函数怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JS中call()、apply()和bind()函数怎么使用

今天小编给大家分享一下JS中call()、apply()和bind()函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

call()

介绍

通过提供一个新的this值给当前调用的函数/方法,从而改变this指向。

语法

fn.call(this.Arg, arg1, arg2,...)

thisArg:当前调用函数this指向的对象
arg1, arg2:传递的其他参数(直接传给形参可不写)

特点

  • 可以直接调用函数—fn.call()

  • 可以改变被调用函数的this指向为指定的— fn.call(this.Arg)

返回值

使用调用者提供的值和参数调用该函数的返回值,也就是函数的返回值。若该方法没有返回值,则返回undefined

使用(主要应用)

通过使用call()来实现继承

// 借用父构造函数继承属性// 父构造函数function Father(name, age) {    this.uname = name    this.age = age}// 子构造函数function Son(name, age) {    Father.call(this, name, age)}var son = new Son('小明', 10)console.log(son); // Son {uname: '小明', age: 10}

apply()

介绍

apply-应用、运用的意思。
apply()-调用一个具有给定值的函数,以及以一个数组(或一个类数组对象)的形式提供的参数this,简单理解为调用函数的,fang'shi但是它可以改变this指向。

语法

fn.apply(this.Arg, [argsArray])

thisArg:在fn函数运行时指定的this值,当不需要改变this指向时这里可以填null
argsArray:传递的值,必须包含在数组里面。

特点

  • 也是调用函数—fn.apply()

  • 可以改变函数内部的this指向—fn.apply(this)但是它的参数必须是数组(伪数组)

返回值

apply()的返回值就是函数的返回值,因为它就是调用函数。
使用调用者提供的值和参数调用该函数的返回值。若该方法没有返回值,则返回undefined

使用

var a = {    name: '小红'}function fn(arr) {    console.log(this); // {name: '小红'}    console.log(arr); // blackpink 传字符串就输出字符串传数字就输出数字}fn.apply(a, ['blackpink'])// fn.apply() // this->window arr->undefined

典型应用: 借助于数学内置对象求值。

var arr = [1, 66, 3, 99, 4]// var max = Math.max.apply(null, arr) // 虽然这里的this指向不需要改变填null没有错var max = Math.max.apply(Math, arr) // 但是这里最好是让this指向函数的调用者是最合适的var min = Math.min.apply(Math, arr)console.log(max); // 99console.log(min); // 1

bind()

介绍

bind:绑定、捆绑
bind():不会调用函数,但是也能改变函数内部的this指向

语法

fn.bind(thusArg, arg1, arg2, ...)

thisArg:在fn函数运行时指定的this值
arg1, arg2:传递的其他参数

特点

  • 不会调用原来的函数,不会立即调用

  • 可以改变原来函数内部的this指向;

  • 返回的是原函数改变this之后产生的新函数

返回值

  • 返回由指定的this值和初始化参数改造的原函数拷贝

使用

var c = {    name: '大华'}function fn() {    console.log(this); // {name: '大华'}    console.log(a + b); // 3}// fn.bind(c) // 这里不会有输出值var f = fn.bind(c, 1, 2)f() // 拷贝函数所以输出值用函数调用

典型应用
如果有的函数我们不需要立即调用,但是又想改变这个函数内部this指向,此时用bind(),eg:点击发送验证码60秒后才能二次点击

    <button>按钮</button>    <button>按钮</button>    <button>按钮</button>
var btns = document.querySelectorAll('button')for (var i = 0; i < btns.length; i++) {    btns[i].onclick = function() {        this.disabled = true // 这个this指向的是调用者btn        setTimeout(function() {            // this.disabled = false; // 只用这一个不加bind的话会不管用,因为定时器里面的this指向的是window            this.disabled = false // 此时这里的this指向的是当前点击的那个btn        }.bind(this), 3000) // 这个this指向的是btn这个对象    }}

call(),apply(),bind()的区别

三者相同点

  • 都可以改变函数内部的this指向

不同点

  • callapply 会调用函数,并且改变函数内部this指向;

  • callapply 的传参不一样,call 传参aru1, aru2...形式,apply 必须为数组形式 [arg]

  • bind 不会直接调用函数,但是可以改变函数内部this指向;

应用场景不同:

  • call 经常做继承;

  • apply 经常跟数组有关系,比如借助于数学对象实现数组最大最小值;

  • bind 不调用函数,但是还想改变this指向,比如改变定时器内部this指向。

以上就是“JS中call()、apply()和bind()函数怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JS中call()、apply()和bind()函数怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JS中call()、apply()和bind()函数怎么使用

今天小编给大家分享一下JS中call()、apply()和bind()函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下
2023-07-04

JS中call(),apply(),bind()函数的区别与用法详解

这篇文章主要介绍了JS中call(),apply(),bind()函数的高级用法详解,需要的朋友可以参考下
2022-12-10

JS中call、apply和bind函数手写实现demo的方法是什么

本篇内容介绍了“JS中call、apply和bind函数手写实现demo的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaS
2023-07-05

JavaScript中bind、call、apply方法怎么使用

这篇文章主要讲解了“JavaScript中bind、call、apply方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中bind、call、apply方法怎么
2023-06-30

如何使用JS简单实现apply、call和bind方法

这篇文章主要讲解了“如何使用JS简单实现apply、call和bind方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用JS简单实现apply、call和bind方法”吧!1.方法介
2023-06-29

怎么使用C++ bind函数

本篇内容主要讲解“怎么使用C++ bind函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C++ bind函数”吧!1.使用由来我们看到我使用的代码是boost :: bind,而大家
2023-06-16

怎么使用pandas apply()函数

这篇文章主要讲解了“怎么使用pandas apply()函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用pandas apply()函数”吧!理解 pandas 的函数,要对函数式
2023-06-25

python中apply函数怎么用

本篇内容主要讲解“python中apply函数怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中apply函数怎么用”吧!函数原型:DataFrame.apply(func, a
2023-06-26

怎么使用js中hasOwnProperty函数

这篇文章主要介绍“怎么使用js中hasOwnProperty函数”,在日常操作中,相信很多人在怎么使用js中hasOwnProperty函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用js中hasO
2023-06-25

js中match函数和g怎么用

小编给大家分享一下js中match函数和g怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript有什么特点1、js属于一种解释性脚本语言;2、在
2023-06-14

 js中toString()函数与valueOf()函数怎么使用

本篇内容介绍了“ js中toString()函数与valueOf()函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、前言在等
2023-06-30

js的Map函数怎么使用

本文小编为大家详细介绍“js的Map函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“js的Map函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Map是ES2015引入的Global Obj
2023-06-29

JS周期函数setInterval怎么使用

setInterval函数用于按照指定的时间间隔重复执行指定的代码块或函数。它接受两个参数,第一个参数是要执行的代码块或函数,第二个参数是时间间隔(以毫秒为单位)。下面是setInterval函数的使用方法:```javascript//
2023-09-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录