美文网首页前端
js call apply 与 bind方法

js call apply 与 bind方法

作者: jasmine_6aa1 | 来源:发表于2020-03-07 23:21 被阅读0次
    var ary=[12,24,85];
    ary.slice; //实例通过原型链的查找机制找到Arrary.prototype上的slice方法
    ary.slice();//让找到的slice方法执行在执行时候把ary数组进行截取;
    

    相同点:都是改变 this的指向

    call, apply,bind 的函数

    1,fn.call(obj,100,200);第一个参数是给函数执行时候,给this赋值,后面才是传的参数,在执行call方法时候,让fn方法中的this变为第一个参数值obj;然后再把fn这个函数执行
    在不严格情况下:当传递的this 为null或undefined时候,this为window
    严格情况下:当传递的this 为null或undefined时候,this为null或undefined
    2,apply(obj, [100,200]);第一个参数是改变this的指向,后面参数是放在一个数组中传参

    3,bind(obj,参数1,参数2)():bind 绑定 this ,后面是传的参数,如果后面不加(),则返回的是一个函数,加上()则返回一个函数运行的结果

    plus.bind(obj, 3, 4); // 返回一个函数,bind 的时候不会立即执行
    plus.bind(obj, 3, 4)(); // 8 ,返回运行的结果
    

    区别:

    1,call方法,第一个是改变this的指向,后面传的参数是一个一个传的
    2,apply方法:第一个是改变this的指向,后面传参是一个数组整个传过去
    3,bind方法:第一个是改变this的指向,后面传的参数是一个一个传的,但是如果后面不加(),则返回函数,加()则返回函数运行的结果

    function  fn(a,b){
        return a+b;
    }
    
    fn.call(obj,100,200);300 //传参是一个个传的
    fn.apply(obj,[100,200]);  300 //传参是放在一个数组中传参
    fn.bind(obj,100,200);fn () // 这里返回的是一个函数
    fn.bind(obj,100,200)();// 300
    

    相关文章

      网友评论

        本文标题:js call apply 与 bind方法

        本文链接:https://www.haomeiwen.com/subject/tlbkdhtx.html