js中call、apply和bind的区别和原理及扩展的高级运用

前言

在面试的过程中,会有许多新问题出现来让你拓展新的知识,也会发现学习中忽略的点。

在前两天的一次面试中,面试官就问了call、apply和bind的区别。事实上,我们也应该领悟得到面试官更想问到的东西是什么,也就是拓展出来的东西。

call

call是所有函数都能调用的方法,是Function.prototype里的方法

作用

调用函数

改变this,作为第一个参数

传递参数,第二个参数之后的所有个数的参数

案例

function fn1(){    console.log(1);}function fn2(){    console.log(2);}fn1.call(fn2); //输出 1fn1.call.call(fn2); //输出 2

登录后复制

解析
第一行输出,调用了fn1并将this指向fn2
第二行输出,事实上,执行的call()才是关键,这里就涉及了Function.prototype.call()的机制,它只是把.call()之前的代码段当作一个变量,将传递的代码段指向this,则fn1.call指向了fn2,于是就相对于fn2.call(),只是这里传递的this为window

运用

继承的方法

  function Father(uname,age){      this.uname= uname;      this.age=age;  }  Father.prototype={      constructor:Father,      sing:function(){          console.log("唱跳rap");      }  }  function Son(){      Father.call(this,uname,age)  }  Son.prototype=new Father();

登录后复制

apply

apply同样也是所有函数都能调用的方法,是Function.prototype里的方法

作用

调用函数

改变this

传递参数,第二个参数之后的所有数组参数

与call的区别

apply第二个参数是Array,而call是将参数以个数的形式传入

运用

运用Math函数获取最大值

  let arr=Array.of(2,42,56,89,1,24,56,22)  let max=Math.max.apply(Math,arr)  console.log(max);

登录后复制

bind

bind同样也是所有函数都能调用的方法,是Function.prototype里的方法

作用

改变this

传递参数,第二个参数之后的所有个数参数

返回新函数

与call、apply的区别

与前两者的最大不同就是不会调用函数并且修改后返回新的函数

运用

let btns=document.querySelectorAll("button")for(let btn of btns){    btn.onclick=function(){        this.disabled=true;        setTimeout(function(){            this.disabled=false;        }.bind(this),2000);    }}

登录后复制

上面的案例修改了定时器的this,同时不会调用函数。但事实上如果你用了箭头函数的写法,因箭头函数的this是关乎上下文的this,因此会简单许多,这个案例意在给我们理解bind的用法,那么在下面附上箭头函数的写法

let btns=document.querySelectorAll("button")for(let btn of btns){    btn.onclick=function(){        this.disabled=true;        setTimeout(()=>{            this.disabled=false;        },2000);    }}

登录后复制

推荐教程:《JS教程》

以上就是js中call、apply和bind的区别和原理及扩展的高级运用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2727049.html

(0)
上一篇 2025年3月7日 23:40:37
下一篇 2025年3月7日 23:40:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • AngularJS双向数据绑定原理(详细教程)

    这篇文章主要介绍了angularjs双向数据绑定原理之$watch、$apply和$digest的应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 引子 这篇文章是写给AngularJS新手的,如果你已经对AngularJS的双向数据…

    2025年3月31日
    200
  • apply+Math.max()函数使用

    这次给大家带来apply+Math.max()函数使用,apply+Math.max()函数使用的注意事项有哪些,下面就是实战案例,一起来看一下。 下面给大家介绍js中apply和Math.max()函数的问题,具体内容如下所示: var …

    编程技术 2025年3月31日
    100
  • 在Javascript中如何实现bind

    这篇文章主要介绍了javascript中从学习bind到实现bind的过程,有兴趣的朋友跟着学习下吧。 bind是什么 bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个…

    编程技术 2025年3月31日
    100
  • jquery on bind之间有什么区别

    JQuery从1.7+版本开始,提供了on()和off(),进行事件处理函数的绑定和取消。这2个API与JQuery最初提供的bind()和unbind()有很多相似的地方,也有一些不同之处。bind和unbind的详细介绍,可以参考这篇文…

    编程技术 2025年3月29日
    100
  • javascript apply的用法是什么

    javascript apply的作用是编写用于不同对象的方法;apply()方法接受数组形式的参数,其使用语法如“person.fullName.apply(person1);”。 本文操作环境:Windows7系统、javascript…

    2025年3月11日
    300
  • 如何解决jquery bind失效问题

    jquery bind失效的解决办法:1、创建一个HTML示例文件;2、使用“$(“.sentnum-box”).delegate(“.a-add-ordergoods”,”cli…

    2025年3月11日
    200
  • jQuery使用bind函数实现绑定多个事件

    本文主要介绍了jquery使用bind函数实现绑定多个事件的方法,结合简单实例形式分析了jquery使用bind函数进行多个事件绑定的操作技巧与注意事项,需要的朋友可以参考下,希望能帮助到大家。 本文实例讲述了jQuery使用bind函数实…

    编程技术 2025年3月8日
    300
  • bind函数绑定多个事件的实现方法

    本文主要和大家介绍jquery使用bind函数实现绑定多个事件的方法,结合简单实例形式分析了jquery使用bind函数进行多个事件绑定的操作技巧与注意事项,需要的朋友可以参考下,希望能帮助到大家。 在jQuery中绑定多个事件名称是,使用…

    编程技术 2025年3月8日
    400
  • JS中的this、apply、call、bind实例分享

    this 的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象,来,跟着我朗读三遍:this 永远指向最后调用它的那个对象,this 永远指向最后调用它的那个对象,this 永远指向最后调…

    编程技术 2025年3月8日
    300
  • 实例解析js原型和call()

    本文主要和大家分享js原型和call(),我们对js原型和call()做了一个小总结,希望能帮助到大家。 /*原型也是一个对象把共有的属性或者方法放在原型中*///Person.prototype 原型/*Person.prototype …

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论