bind、call、apply的区别和作用_access3631的博客-程序员秘密

技术标签: ViewUI  javascript  

一、主要作用

  三个方法都实现一个重要的作用:改变方法(函数)的this指向

二、主要区别

  最主要的区别是call()、apply()方法是立即调用当前函数,而bind()是返回一个改变了this指向的新函数,并不立即调用

三、各个方法详细说明

  1、call()详解

    (1)参数,call(newThis,arg1,arg2。。。)

     ① newThis包括以下类型:

       (1)不传,或者传null,undefined, 函数中的this指向window对象
       (2) 传递另一个函数的函数名,函数中的this指向这个函数的引用
       (3) 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean
       (4) 传递一个对象,函数中的this指向这个对象

     ② args是将会传入被绑定函数的参数,被绑定函数的执行时参数顺序为:newThis,args,原参数

    

    (2)示例代码

 

      function a(){   
        console.log(this);   //输出函数a中的this对象
      }       

      function b(){}       

      var c={name:"call"};    //定义对象c  

      a.call();   //window
      a.call(null);   //window
      a.call(undefined);   //window
      a.call(1);   //Number
      a.call('');   //String
      a.call(true);   //Boolean
      a.call(b);   //function b(){}
      a.call(c);   //Object

 

  2、apply()详解

     apply(newThis,[arrArg])apply和call的作用完全一样,只是接收[arrArg]参数时必须为数组形式,否则就会报类型错误。

 

  3、bind()详解

    bind是在EcmaScript5中扩展的方法(IE6,7,8不支持)

 

    MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作 为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

 

    需要注意的是:bind方法的返回值是函数

 

    参考文档:https://www.cnblogs.com/libin-1/p/6069031.html

         https://www.cnblogs.com/pssp/p/5215621.html

 

转载于:https://www.cnblogs.com/hutaoblog/p/8407085.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/access3631/article/details/101713107

智能推荐

Silverlight视频播放器_weixin_33717117的博客-程序员秘密

播放服务器端的视频图2-4 自定义的Silverlight视频播放器 这个实例设计了1个自定义的Silverlight视频播放器(视频源文件放在服务器端),如图2-4所示,这个示例完全在Expression Blend 4中设计,视频放在服务器端的文件夹中,网上调试成功。示例设计的复杂一点,当然功能也强,如果减少功能程序也会简单。图2-...

SSM中spring、springmvc、web.xml、Mybaits之间的关系和配置。_jjqqff_123的博客-程序员秘密

一:Web.xml:这个一般是浏览器请求做处理的配置界面。请求一来首先进入这个配置文件。想要让SSM进行关联,                            (1)在这个请求进来直接加载spring容器。然后在加载springmvc。  <?xml version="1.0" encoding="UTF-8"?>   <web-app xmlns:xsi="http://...

NumPy数组的高级操作_Ssaty.的博客-程序员秘密

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,一般我们使用*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。花式索引(Fancy Indexing)是NumPy用来描述使用整型数组(这里的数组,可以是NumPy的数组,也可以是python自带的list)作为索引的术语,其意义是根据索引数组的值作为目标数组的某个轴的下标来取值。stack的意思是堆叠的意思,所谓的堆叠就是将两个ndarray对象堆叠在一起组合成一个新的ndarray对象。

【POJ2342】Anniversary party_VL——MOESR的博客-程序员秘密

DescriptionThere is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E. Tretyakov. In

SpringBoot中@Async注解配合@EnableAsync注解开启异步任务详解_时光无声_l的博客-程序员秘密

目录前言没有异步执行,没有@Async注解时异步执行任务,加入@Async注解时前言@Async为异步注解,放到需要使用异步的方法上面,表示调用该方法的线程与此方法异步执行,需要配合@EnableAsync注解使用。没有异步执行,没有@Async注解时1、创建一个普通的类,并注入到IOC容器中package com.example.demo;import org.springframe...

vscode+flutter+win10搭建问题记录_a82268569的博客-程序员秘密

1.下载安装vscode、flutter sdk、安装vscode相关插件、android sdk,这些网上有教程,比如https://blog.csdn.net/SVNzK/article/details/843142262.不想安装android studio,所以android sdk是单独下载的,模拟器直接使用其中自带的avd manager,在此推荐一下android s...

随便推点

【转】c语言中的定义和声明_diaomo9737的博客-程序员秘密

1.变量的定义、声明变量的声明有两种情况:一种是需要建立存储空间的。例如:int a。在声明的时候就已经建立了存储空间。这种声明是"定义性声明(defining declaration)",即我们平时所说的“定义”。另一种是不需要建立存储空间的,只是告诉编译器某变量已经在别处定义过了。例如:extern int a。其中,变量a是在别处定义的。这种声明是"引用性声明(re...

Mysql时区差异异常-The server time zone value ‘xxx‘ is unrecognized or represents more than one time zone._mysql时区报错原因_BB-X的博客-程序员秘密

Mysql时区差异异常-The server time zone value 'xxx' is unrecognized or represents more than one time zone.

leaflet知识整理_weixin_34319817的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

potplayer--快进设置_欲饮琵琶码上催的博客-程序员秘密

看视频个人一直用的这款,相当优秀,看电影,看教学视频都是用它potplayer下载地址http://www.potplayer.org/有时候看教程的时候,发现快进一下跳一分钟,想回头看就看不了快进秒数设置F5完毕...

经典案例:企业H3C组网实例_weixin_34248023的博客-程序员秘密

博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!随着企业信息化不断的深入,对网络设备和链路的可靠性、安全性、可管理型提出了更高的要求,本案例通过一个企业网总部及分支的拓扑和配置,列出了当前构建中小型企业网络的主流技术,涉及网关备份、链路冗余、...

React-Redux 的用法及connet用装饰器编写_面条请不要欺负汉堡的博客-程序员秘密

 一.介绍 1.说明    使用react-redux是为了更好的组织react和redux。这个库是可以选用的。实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React-Redux。后者虽然提供了便利,react-redux在redux的基础上,但是需要掌握额外的 API,并且要遵守它的组件拆分规范。就关注两点:Provider和connect 2.安装  npm ins...

推荐文章

热门文章

相关标签