JavaScript基础 (十二) ---- call apply bind的区别

1. call apply bind的作用 —- 用来改变函数中this的指向
2. call 的使用方法

call()中第一个参数:用来改变this指向
call()中从第二个参数开始,相当于给call点前面的函数,从左往右一个个的传参;

把call点前面的函数中的this关键字变成call的第一个参数;
注意:如果call前面的函数中没有this关键字,那么就不需要修改,直接调用此函数即可;
把call点前面的函数调用;

例子:

    var obj={name:'aaa'};
    function fn(n,m){
        console.log(this,(n+m));    //()用来提高优先级
    }
    fn.call(obj,2,3);    //window的全局方法;{name: "aaa"} 5
3. apply 的使用方法

apply总共有两个参数:1.用来改变this指向 2.把所有的实参放在一个数组中;
但是,它对apply点前面的函数进行传参的时候,相当于给fn1的参数从左往右一个个的传参;

例子:

    var obj={};
    function fn1(n,m){
        alert(this+(n+m));
    }
    fn1.apply(obj,[2,3])
4. bind 的使用方法

bind属于预处理机制:
bind()会提前修改后函数中的this和参数,然后返回个修改后的函数;等需要的时候,手动调用;
bind的传参方式,跟call一样;第一个参数改变this的指向,从第二个参数开始一个个的传参;

例子:

    var obj={};
    function fn(n,m){
        alert(this+(n+m))
    }
    var res=fn.bind(obj,2,3); //bind的传参方式跟call 一样;
    res();//是个新地址,跟以前没关系;
    fn(2,3);
    /*  
    * 预处理机制:
    * 1.当调用bind方法的时候,会预先把fn中的this改成obj,同时如果有参数的话,也会给fn中的形参赋值
    * 2.把已经修改好的fn,返回;
    * 3.在我们需要的时候,手动调用;
    */
5. call,apply,和bind区别

call,apply在this被改变后,函数会立即执行;
bind属于预处理机制:bind()会提前修改后函数中的this和参数,然后返回个修改后的函数;等我们需要的时候,手动调用;
bind的传参方式,跟call一样;只有apply的第二个参数是一个数组;其他的都是从第二个参数开始一个个的传参;

6. 关于函数中的this总结
1.当元素的事件被触发的时候,执行一个方法,方法中的this指向当前这个元素
2.自执行函数中的this,永远是window;
3.当函数被调用的时候,点前面是谁,this就是谁;
4.构造函数中的this指向当前实例
5.回调函数中的this一般是window;
6.当遇到call,apply,bind的时候,以上规律都不适用,他们可以通过第一个参数去改变this指向;
7. 严格模式和非严格模式下的不同

严格模式 //”use strict”//

    var obj={};
    function fn(){
        alert(this)
    }
    //在严格模式下,给call的第一个参数传什么,this指向就是什么
    fn.call(null);
    fn.call(undefined);
    fn.call();  //不传也是undefined;

非严格模式下

    fn.call();//没有穿第一个参数,thiswindow;
    fn.call(null)//null,this也是window;
    fn.call(undefined)//undefinedthis也是window//apply跟call在this方面一模一样;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值