• call apply bind


    相同点:都可以改变函数内部的this指向

    区别点:

    1.call和apply会调用函数,并且改变函数内部this指向

    2.call和apply传递的参数不一样,call传递参数aru1,aru2...形式 apply必须是数组形式

    3.bind不会调用函数,可以改变函数内部this指向

    主要应用场景

    1.call经常做继承

    2.apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值

    3.bind不调用函数,但是还想改变this指向,比如改变定时器内部的this指向

    1.         var o={
    2.             name:'andy'
    3.         }
    4.         function fn(a,b){
    5.             console.log(this) //window
    6.             console.log(a+b)
    7.         }
    8.         fn.call(o,1,2)   //this=>andy 2

    实现继承

    1. function Father(uname,age,sex){
    2. this.uname=uname;
    3. this.age=age
    4. this.sex=sex;
    5. }
    6. function Son(uname,age,sex){
    7. Father.call(this,uname,age,sex);
    8. }
    9. var son=new Son('刘德华',18,'男');
    10. console.log(son) //刘德华 18 男

    apply的应用

    1. var o={
    2. name:'andy'
    3. }
    4. function fn(arr){
    5. console.log(this)
    6. console.log(arr)
    7. }
    8. fn.call(o,['pink']) //andy pink

    apply的主要应用 比如我们可以利用apply借助于数学的内置对象求最大值

    1. //Math.max()
    2. var arr=[1,66,3,55,36]
    3. // var max=Math.max.apply(null,arr)
    4. var max=Math.max.apply(Math,arr)
    5. var min=Math.min.apply(Math,arr)
    6. console.log(max,min) //1 66
    1. var a = {
    2. name : "Cherry",
    3. func1: function () {
    4. console.log(this.name)
    5. },
    6. func2: function () {
    7. setTimeout( function () {
    8. this.func1()
    9. }.apply(a),100);
    10. }
    11. };
    12. a.func2() // Cherry

        //    bind()方法

        // 1.不会调用原来的函数,可以改变原来函数内部的this指向

        // 2.返回的是原函数改变this之后产生的新函数

        // 3.如果有的函数我们不需要立即调用,但是又想改变这个函数内部的this指向此时用bind
     

    1. //点击按钮时,我们点击之后,就禁用这个按钮,3秒钟之后开启这个按钮
    2. // var btn=document.querySelector('bntton');
    3. // btn.οnclick=function(){
    4. // this.disabled=true; //这个this指向btn
    5. // var that=this;
    6. // setTimeout(function(){
    7. // that.disabled=false //加上that之后,this被改变成btn
    8. // //定时器函数里面的this指向的是window
    9. // },3000)
    10. // }
    11. // 此时用bind方法更简单
    12. // var btn=document.querySelector('bntton');
    13. // btn.οnclick=function(){
    14. // this.disabled=true; //这个this指向btn
    15. // setTimeout(function(){
    16. // disabled=false //加上that之后,this被指向btn
    17. // //定时器函数里面的this指向的是window
    18. // }.bind(this),3000) //改变定时器this指向,这个this指向是btn
    19. // }

    饮水思源:Es6 call(),apply(),bind()_^smile的博客-CSDN博客

  • 相关阅读:
    2022级大学新生-电脑推荐
    【踩坑记录】创建Go模块-从其他远程模块调用代码的教程
    Linux | 二级页表的虚拟地址是怎么转换的?
    【Linux】Linux常用命令大全
    《中国工业经济》企业数字化转型与供应链配置—集中化还是多元化
    javascript网页设计案例
    无线渗透-WPA攻击
    Java+SSM+JSP实现医院预约挂号系统
    webpack是如何解析模块的
    Harmony | 超好用的单细胞测序数据合并(3‘和5‘数据合并)(二)
  • 原文地址:https://blog.csdn.net/start7000k/article/details/126265846