iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中bind、call、apply方法怎么使用
  • 118
分享到

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

2023-06-30 12:06:02 118人浏览 泡泡鱼
摘要

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

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

call的基本使用

var ary = [12, 23, 34];ary.slice();

以上两行简单的代码的执行过程为:ary这个实例通过原型链的查找机制找到Array.prototype上的slice方法,让找到的slice方法执行,在执行slice方法的过程中才把ary数组进行了截取。

注意slice方法执行之前有一个在原型上查找的过程(当前实例中没有找到,再根据原型链查找)。

当知道了一个对象调用方法会有一个查找过程之后,我们再看:

var obj = {name:'iceman'};function fn() {    console.log(this);    console.log(this.name);}fn(); // this --> window// obj.fn(); // Uncaught TypeError: obj.fn is not a functionfn.call(obj);

call方法的作用:首先寻找call方法,最后通过原型链在Function的原型中找到call方法,然后让call方法执行,在执行call方法的时候,让fn方法中的this变为第一个参数值obj,最后再把fn这个函数执行。

知道这个原型上的原理后,咱们就可以动手分析实现这三个方法了。

bind、call、apply 区别

  • call 和 apply 都是为了解决改变 this 的指向。作用都是相同的,只是传参的方式不同。

  • 除了第一个参数外,call 可以接收一个参数列表,apply 只接受一个参数数组

let a = {    value: 1}function getValue(name, age) {    console.log(name)    console.log(age)    console.log(this.value)}getValue.call(a, 'yck', '24')getValue.apply(a, ['yck', '24'])

bind 和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过 bind 实现柯里化

如何实现一个 bind 函数

对于实现以下几个函数,可以从几个方面思考

  • 不传入第一个参数,那么默认为 window

  • 改变了 this 指向,让新的对象可以执行该函数。那么思路是否可以变成给新的对象添加一个函数,然后在执行完以后删除?

当然是肯定的,于是我们可以这样写:

Function.prototype.myBind = function (context) {  if (typeof this !== 'function') {    throw new TypeError('Error')  }  var _this = this  var args = [...arguments].slice(1)  // 返回一个函数  return function F() {    // 因为返回了一个函数,我们可以 new F(),所以需要判断    if (this instanceof F) {      return new _this(...args, ...arguments)    }    return _this.apply(context, args.concat(...arguments))  }}

如何实现一个 call 函数

Function.prototype.myCall = function (context,...arg) {  var context = context || window  // 给 context 添加一个属性  // getValue.call(a, 'yck', '24') => a.fn = getValue  //使用symbol 选择一个独一无二的值作为新添加的属性  let symbol = new Symbol();  context[symbol] = this;  let result = context[symbol](...arg)  // 删除添加的函数  delete context[symbol]    return result}

如何实现一个apply 函数

apply实现原理与call实现基本类似,只有传值的方式不一样。

Function.prototype.myApply = function (context,arg) {  var context = context || window // 给 context 添加一个属性 // getValue.call(a, 'yck', '24') => a.fn = getValue //使用symbol 选择一个独一无二的值作为新添加的属性 let symbol = new Symbol(); context[symbol] = this; let result = context[symbol](arg) // 删除添加的函数 delete context[symbol] return result}

经过对以上的函数进行检测 , 完美通过。

const obj = {   name : 'xiaoxiao',   getName : function (arg) {   console.log(`我是${this.name}里面的,我里面有${arg}`);   }  }  obj.getName([0,0,0,0,0]); // 我是xiaoxiao里面的  const obj2 = {   name : 'huahua'  }  //传值不一样  obj.getName.myCall(obj2,1,1,1,1,1,1);  obj.getName.myBind(obj2)(2,2,2,2,2,2);  obj.getName.myApply(obj2,[3,3,3,3,3,3]);

感谢各位的阅读,以上就是“JavaScript中bind、call、apply方法怎么使用”的内容了,经过本文的学习后,相信大家对JavaScript中bind、call、apply方法怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JavaScript中bind、call、apply方法怎么使用

本文链接: https://www.lsjlt.com/news/328590.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • JavaScript中bind、call、apply方法怎么使用
    这篇文章主要讲解了“JavaScript中bind、call、apply方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中bind、call、apply方法怎么...
    99+
    2023-06-30
  • 怎么使用Javascript中apply、call、bind
    本篇内容介绍了“怎么使用Javascript中apply、call、bind”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2024-04-02
  • JavaScript手写call,apply,bind方法
    目录前言改写this实现思路前期准备手写call方法手写apply方法手写bind方法前言 改变this指向在书写业务的时候经常遇到,我们经常采用以下方法进行改写 使用作用声明变量存...
    99+
    2024-04-02
  • javascript怎么实现call、apply和bind方法
    本篇内容介绍了“javascript怎么实现call、apply和bind方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅...
    99+
    2024-04-02
  • 一文了解JavaScript中call/apply/bind的使用
    目录前言1. call1.1 语法1.2 流程图1.3 代码实现2. apply2.1 语法2.2 流程图2.3 代码实现3. bind3.1 语法3.2 流程图3.3 代码实现4....
    99+
    2024-04-02
  • JS中call()、apply()和bind()函数怎么使用
    今天小编给大家分享一下JS中call()、apply()和bind()函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-04
  • 再谈JavaScript中bind、call、apply三个方法的区别与使用方式
    call的基本使用 var ary = [12, 23, 34]; ary.slice(); 以上两行简单的代码的执行过程为:ary这个实例通过原型链的查找机制找到Array.pro...
    99+
    2024-04-02
  • Javascript实现call,bind,apply的代码怎么写
    这篇文章主要介绍了Javascript实现call,bind,apply的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Javascript实现call,bind,apply的代码怎么写文章都会有所收...
    99+
    2023-06-29
  • JavaScript中call、apply、bind实现原理详解
    目录前言call用法实现简单的实现版本:升级版:apply用法实现bind用法基本版:升级版:总结前言 众所周知 call、apply、bind 的作用都是‘改变'作用域,但是网上对...
    99+
    2024-04-02
  • JavaScript中call,apply,bind的区别与实现
    目录区别call实现apply实现bind实现bind 返回的函数 作为普通函数调用 代码实现bind 返回的函数 作为构造函数调用bind代码最终实现区别 call、apply、b...
    99+
    2024-04-02
  • JavaScript函数之call、apply以及bind方法案例详解
    总结 1、相同点 都能够改变目标函数执行时内部 this 的指向 方法的第一个参数用于指定函数执行时内部的 this 值 支持向目标函数传递任意个参数 ...
    99+
    2024-04-02
  • 如何使用JS简单实现apply、call和bind方法
    这篇文章主要讲解了“如何使用JS简单实现apply、call和bind方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用JS简单实现apply、call和bind方法”吧!1.方法介...
    99+
    2023-06-29
  • 一文搞懂JavaScript中bind,apply,call的实现
    目录bind、call和apply的用法bindcall&apply实现bind实现call和apply总结bind、call和apply都是Function原型链上面的方法...
    99+
    2024-04-02
  • JS 函数的 call、apply 及 bind 超详细方法
    目录JS 函数的 call、apply 及 bind 方法一、call() 方法1、call()方法的模拟实现二、apply() 方法1、apply()方法的模拟实现 三、bind(...
    99+
    2024-04-02
  • Javascript 的caller,callee,call,apply怎么使用
    本篇内容主要讲解“Javascript 的caller,callee,call,apply怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript 的caller,callee...
    99+
    2023-06-03
  • JavaScript的call与apply怎么定义使用
    这篇文章主要介绍“JavaScript的call与apply怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript的call与apply怎么定义使用”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • 使用JS简单实现apply、call和bind方法的实例代码
    目录1.方法介绍2.apply、call和bind方法的实现2.1.apply的实现2.2.call的实现2.3.bind的实现总结1.方法介绍 apply、call和bind都是系...
    99+
    2024-04-02
  • JS中call(),apply(),bind()函数的区别与用法详解
    call() 介绍 通过提供一个新的this值给当前调用的函数/方法,从而改变this指向。 语法 fn.call(this.Arg, arg1, arg2,...) thisAr...
    99+
    2022-12-10
    JS中call() apply() bind()函数的区别与使用方法 call() apply() bind()的区别 JS中call()使用方法 JS中apply()使用方法 JS中bind()使用
  • JS中call、apply和bind函数手写实现demo的方法是什么
    本篇内容介绍了“JS中call、apply和bind函数手写实现demo的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaS...
    99+
    2023-07-05
  • JavaScript的call()方法怎么用
    这篇文章主要讲解了“JavaScript的call()方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的call()方法怎么用”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作