浅谈call apply bind的区别

这三个方法的用法非常相似,将函数绑定到上下文中,即用来改变函数中this的指向。举个例子:

var zlw = {
    name: "zlw",
    sayHello: function (age) {
         console.log("hello, i am ", this.name + " " + age " years old");
     }
};

var  xlj = {
    name: "xlj",
};

zlw.sayHello(24);// hello, i am zlw 24 years old

下面看看call、apply方法的用法:

zlw.sayHello.call(xlj, 24);// hello, i am xlj 24 years old
zlw.sayHello.apply(xlj, [24]);// hello, i am xlj 24 years old

结果都相同。从写法上我们就能看出二者之间的异同。相同之处在于,第一个参数都是要绑定的上下文,后面的参数是要传递给调用该方法的函数的。不同之处在于,call方法传递给调用函数的参数是逐个列出的,而apply则是要写在数组中。

我们再来看看bind方法的用法:

zlw.sayHello.bind(xlj, 24)(); //hello, i am xlj 24 years old
zlw.sayHello.bind(xlj, [24])(); //hello, i am xlj 24 years old

bind方法传递给调用函数的参数可以逐个列出,也可以写在数组中。bind方法与call、apply最大的不同就是前者返回一个绑定上下文的函数,而后两者是直接执行了函数。由于这个原因,上面的代码也可以这样写:

zlw.sayHello.bind(xlj)(24); //hello, i am xlj 24 years old
zlw.sayHello.bind(xlj)([24]); //hello, i am xlj 24 years old

bind方法还可以这样写 fn.bind(obj, arg1)(arg2) 。

用一句话总结bind的用法:该方法创建一个新函数,称为绑定函数,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

原文地址:https://www.cnblogs.com/cmy1996/p/9103071.html

时间: 2024-09-30 20:12:13

浅谈call apply bind的区别的相关文章

浅谈call , apply ,bind 的 差异

---恢复内容开始--- //首先这三个的根本作用都是改变this的指向,这个你必须明确 先说call //首先用单列模式声明一个对象:里面有个fn的方法,很简单,就是返回a里面的name; var a = { name : '极速代码', fn:function(){ return this.name; } }: a.fn()       //-->输出是 '极速代码' ,这个毫无疑问: var b = a.fn;      //声明一个对象b:让他等于a里面的这个fn方法: b();    

浅谈 Cookie 与 Session 的区别

1.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求附上这些cookies . 具体来说cookie机制采用的是在客户端保持会话状态的方案.它是在用户端的会话状态的存贮机制,他需要用户

浅谈SEO与SEM的区别

很多刚接触SEO的朋友,对于SEO都有一些迷茫和不解.今天,若言就简单的为大家介绍一下什么是SEO.什么是SEM.SEO与SEM的区别,希望对大家能有所帮助! 搜索引擎优化(Search engine optimization,简称SEO).针对搜索引擎的理论机制,对网站结构网页文字语言和站点间的互动外交策略,进行很里规划部署来发掘网站最大潜力.从而使其在搜索引擎具有较强的自然排名竞争优势.从而,促进企业在线销售和强化网络品牌. 讲得通俗一点,就是针对搜索引擎对自己的网站进行优化.SEO主要是通

浅谈 unix, linux, ios, android 区别和联系

浅谈 unix, linux, ios, android 区别和联系 网上的答案并不是很好,便从网上整理的相对专业的问答,本人很菜,大佬勿喷 UNIX 和 Linux ??UNIX 操作系统(尤尼斯), 是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由 KenThompson.Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发.目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX 规范的

javascript中call,apply,bind的区别

在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢. 在说区别之前还是先总结一下三者的相似之处: 1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对象.3.都可以利用后续参数传参.那么他们的区别在哪里的,先看一个例子. var xw = { name : "小王", gender : "男", age : 24, say : function() { alert(this.name + " , &qu

创建对象的方式以及call,apply,bind的区别

创建对象的方式有四种 1.直接量 var obj={ 属性名:属性 方法名:function(){} } 2.通过构造函数创建对象,这样能够批量创建多个具有相同属性的子对象(顺便介绍call,apply,bind三个关键字的区别应用) function person(name,age){ this.name=name; this.age=age; } 或者function person2(name,age){ this.name=argument[0]; this.age=argument[1]

浅谈angular2与angularJS的区别

简介 大家好,今天给大家介绍一下angular,相信做过前端的小伙伴们都知道angular的大名,angularJS自2012年发布起就受到了大家的广泛关注.他首次提出了双向绑定概念让所有人都耳目一新,2016年angular2正式被发布,那么angular2到底有什么值得期待的地方呢,接下来讲一下angular2吸引人的地方. 1.1.1  angularJS的困境以及angular2的新特性 首先呢我们讨论一下angularJS的一些不足之处: 1.饱受诟病的性能问题 通过检查进行数据更新,

从内部入手,浅谈malloc和new的区别

想要理解一样事物,就要先用自己的语言去描述一件事物.在我查阅资料后,发现malloc函数简单说来就是空闲内存空间收集器,并把空闲空间关联起来,用术语来说就是:将空闲内存块合并起来并称为"闲置链表".然后在这块空闲空间进行划分,划出用户需要的与用户不需要的.然后把用户需要的给用户,不需要的返还给"闲置链表".而用户使用free释放时候也是扔回去的过程.但是这时候的空闲空间是间断的片段,malloc函数就需要去整理整合这些片段,若空间达不到用户需要,malloc就会返还

call apply bind的区别

bind : bind绑定完this的指向后会返回一个新的函数体,不会被立即调用 call apply : 绑定完this的指向后会立即调用 call : 第一个参数是this的指向,第二个以及后面的所有参数需要一个个进行传递 apply : 第一个参数是this的指向,第二个参数是一个数组 原文地址:https://www.cnblogs.com/szj-/p/10674761.html