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

智能推荐

select2初始化后搜索框不能点击的问题_suchengbin3433的博客-程序员秘密_select2 ie8下没有搜索框

可以试试加一行代码 $.fn.modal.Constructor.prototype.enforceFocus = function () { }; 

实用工具分享-桌面美化软件Fences_weixin_40299086的博客-程序员秘密_fences csdn

现在的上班一族每天工作都很繁忙,根本就没时间整理电脑桌面,电脑桌面图标杂乱找个东西还要花几分钟,有时候还出现误删的情况,桌面美化软件可以帮助你整理好电脑桌面文件,不常用的也会帮你统一放在一个文件夹里面,这样不仅让电脑桌面美观而且还可以大大提高工作和学习效率,不用再担心重要文件被误删除啦。Fences是著名的Stardock公司新推出的一款软件,用来分类和组织桌面上的图标,它可以将不同的图标放到...

Win32编程_Li_Zhi_Yao的博客-程序员秘密_win32编程

文章目录前言一、VS编译过程二、WIN32核心库1.动态库2.头文件三、入口函数调用约定前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、VS编译过程源文件(*.c / *.cpp) --> 编译器(cl.exe) --> 目标文件(*.obj)资源文件(*.rc) -- > 资源编译器(rc.exe) --

String的split的使用技巧_weizhaozhe的博客-程序员秘密

 在java.lang包中有String.split()方法,返回是一个数组我在应用中用到一些,给大家总结一下,仅供大家参考:1、如果用“.”作为分隔的话,必须是如下写法:String.split("//."),这样才能正确的分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必须是如下写法:String.split("//|"),这样才能正确的分隔开,不能用

pytorch查看loss曲线_Pytorch里的CrossEntropyLoss详解_weixin_39932838的博客-程序员秘密

在使用Pytorch时经常碰见这些函数cross_entropy,CrossEntropyLoss, log_softmax, softmax。看得我头大,所以整理本文以备日后查阅。首先要知道上面提到的这些函数一部分是来自于torch.nn,而另一部分则来自于torch.nn.functional(常缩写为F)。二者函数的区别可参见 知乎:torch.nn和funtional函数区别是什么?下面是...

从零开始的小白pr学习之旅--day2 数字后端流程(一)_yyeternal99的博客-程序员秘密_数字后端的基本流程是?

个人认为,在开始后端工作的时候,抛开别的,首先要思考的就是我有什么,我要做什么,我要怎么做,我要做到什么程度。有了这个思路,下面将描述下我对数字后端工作流程的理解。 1.Data Prepare 这一阶主要是对手头所拥有的文件,资料做一个整理。个人觉得这是后端工作重中之重的一个环节。大概要整理的内容如下图 首先是库文件,项目所用到的某一厂家的某一制成,会有相应一套完整的库文件。需要在其中选择项目要用到的,并把它们按照固定的分类规整的放置好。比如要用到的lef,包括tlef,s...

随便推点

eclipse 创建java文件_如何使用eclipse创建一个java文件_慕容圆月的博客-程序员秘密

1:如何使用eclipse创建一个java文件第一步:创建一个java项目file——>new-->java project第二步:创建一个package选中项目右键,选择:new-->package注意:规范。所有单词全部小写,顶级域名倒着写。规则,必须符合标识符的规则。作用:用于管理class类(java源文件),一个包中不能有同名的class。第三步: 创建一个class选..._1671465600

敏捷开发——User Story_abg1556的博客-程序员秘密

敏捷开发流程:1、我们首先需要确定一个Product Backlog(按优先顺序排列的一个产品需求列表),这个是由Product Owner 负责的;2、Scrum Team根据Product Backlog列表,做工作量的预估和安排;3、有了Product Backlog列表,我们需要通过 Sprint Planning Meeting(Sprint计划会议) 来从中挑选出...

python绘制立体扇形_你不知道的4种方法:python方法绘制扇形_weixin_39766109的博客-程序员秘密

1 说明:=====1.1 是问答中的我的一个回答。1.1 因为问答中没有代码块的,所以我改为这里写文章,然后链接过去。1.2 4种方法:turtle法、OpenCV法、pygame法和matplotlib法。2 turtle法:=======2.1 代码:#第1步:导入模块import turtle as t#第2步:初始化设置#窗口大小t.setup(800,800)#画笔颜色t.pencol...

cadence vmanager(二)vmanager工作模式_weiqi7777的博客-程序员秘密

一、vmanager的任务流程vmanager的任务流程,如下图所示: 最开始,使用vplan建立验证计划,并且建立验证环境。使用vmanager运行回归,之后分析faild的case,以及收集的metric,确定状态。根据状态,判断,是否收敛,如果收敛,那么验证就结束了,可以signoff,如果验证没有收敛,那么就重新运行回归。这里,就引出了vmanager的两大功能:

vi/vim使用进阶: quickfix_龙啸九天520的博客-程序员秘密

:help quickfix:help :make:help 'makeprg':help 'errorformat':help 'switchbuf':help location-list:help grep:help :vimgrep:help :grep:help starstar-wildcard 以前读武侠小说,看到武林高手们都是从来剑不离手的。使用vim写程序

Java的加载与执行原理详解 Java程序从编写到最终运行经历了哪些过程_二十四日的博客-程序员秘密

前言Java程序从编写到最终运行大概可概括为3个阶段:编写、编译、运行阶段。一、编写阶段程序员在硬盘某个位置新建一个xxx.java文件使用记事本或者其他文本编辑器例如EditPlus打开xxx.java文件在xxx.java文件中编写符合Java语法规则的源代码保存源代码二、编译阶段使用编译器(javac【JDK安装后自带】)将 xxx.java文件编译为 xxx.class文件。如果 xxx.java文件中编写的源代码是符合语法规则的,编译会通过并生成xxx.class字节码文件;

推荐文章

热门文章

相关标签