美文网首页
2-3函数的bind(),call(),apply()方法

2-3函数的bind(),call(),apply()方法

作者: 大庆无疆 | 来源:发表于2019-03-12 17:38 被阅读0次
    --------------------call------------------------
    call
    1 调用函数,改变函数中的this
    2 第一个参数 设置函数内部this的指向
      其它参数,对应函数的参数
    3 函数的返回值 call的返回值就是函数的返回值
    4 测试
    function fn(x, y) {
      console.log(this);
      console.log(x + y);
    }
    fn(5, 6); // this->window
        // obj对象
    var obj = {
      name: 'zs'
    }
    fn.call(obj, 5, 6);
    
    
    // 应用
    // 1、用来操作伪数组(伪数组中没有数组拥有的方法,比如push()方法)
    var a;
    function f1() {
        // 用a来接收
        a = arguments;//arguments是一个伪数组
    }
    
    f1(3,5,2);
    // 利用Array中的方法
    Array.prototype.push.call(a, 9);//为a增加一个9,里面的length属性也会自动增加
    
    // 2、查看类型
    console.log(obj.toString());// 输出:[object Object],前面的object表示是一个对象,后面的表示对象的类型是Object
    var arr = [3,5];
    console.log(arr);// 输出了:[3, 5],因为数组重写过这个方法
    console.log(Object.prototype.toString.call(arr));//输出:[object Array]
    // 我们可以通过这个查看对象的类型
    
    
    
        --------------------apply------------------------
       apply 只有两个参数
        1 调用函数,改变函数中的this
        2 第一个参数  设置函数内部this的指向
          第二个参数  是数组,将数组中的内容当做函数传入
        3 函数的返回值 apply的返回值就是函数的返回值
        4 测试
    
        // 函数fn
    function fn(x, y) {
      console.log(this);
      console.log(x + y);
    }   
    // 对象obj
    var obj = {
      name: 'ls'
    }
    // 将fn中的this指向obj
    fn.apply(obj, [1, 2]);
    
    
    // apply的应用
    // 我们知道Math中有max方法可以找出最大值
    console.log(Math.max(1,5,33,5,7));
    // 在数组中我们没有max方法找出一组数的最大值,借助Math.max方法
    var arr = [3,22,4,6,1]; 
    var max = Math.max.apply(Math, arr);//我们传入的arr数组会被展开,当做实参
    console.log(max);
    
    
    --------------------bind----------------
    
     bind 
    1 改变函数中的this,不会调用函数,而是把函数复制一份
    2 第一个参数 设置函数内部this的指向
      其它参数,对应函数的参数
    3 函数的返回值 call的返回值就是函数的返回值
    4 测试
    
    // 创建函数fn
    function fn(x, y) {
      console.log(this);
      console.log(x + y);
    }
    fn(2,3);  // this -> window
    //创建obj对象
    var obj = {
      name: 'ww'
    }
    
    var f = fn.bind(obj, 5, 5); //将this -> obj
    f();
    
    

    相关文章

      网友评论

          本文标题:2-3函数的bind(),call(),apply()方法

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