zoukankan      html  css  js  c++  java
  • call bind apply

    call bind apply 改变函数中的this

    call

    函数是一个对象
    var fn = new Function();
    function fn() {
    }

    证明fn是Function的实例(对象)
    console.log(fn.__proto__ === Function.prototype);

    console.dir(fn);

    function fn(x, y) {
    console.log(this);
    console.log(x + y);
    }

    fn(5, 6); // this->window

    1 调用函数,改变函数中的this
    2 第一个参数 设置函数内部this的指向
    其它参数,对应函数的参数
    3 函数的返回值 call的返回值就是函数的返回值
    4 测试
    var obj = {
    name: 'zs'
    }
    fn.call(obj, 5, 6);


    apply 只有两个参数
    1 调用函数,改变函数中的this
    2 第一个参数 设置函数内部this的指向
    第二个参数 是数组
    3 函数的返回值 call的返回值就是函数的返回值
    4 测试
    var obj = {
    name: 'ls'
    }
    fn.apply(obj, [1, 2]);

    应用

    var obj = {
    0: 100,
    1: 10,
    2: 11,
    3: 20,
    length: 4
    };
    // obj['4'] = 30;
    // obj.length ++;

    // console.dir(obj);

    Array.prototype.push.call(obj, 30);
    Array.prototype.splice.call(obj, 0, 3);
    console.dir(obj);


    var obj = {
    name: 'zs'
    };

    console.log(obj.toString());

    var arr = [5, 9];
    console.log(arr.toString());

    console.log(Object.prototype.toString.call(arr));

    应用

    // fn.apply(,[])

    // Math.max(3, 5, 6);

    var arr = [5, 10, 1, 3, 6];
    // Math.max不能求数组中的最大值
    // console.log(Math.max(arr));

    console.log(Math.max.apply(null, arr));
    console.log(Math.max.apply(Math, arr));

    // console.log(1, 2, 3);
    // console.log(arr);

    console.log.apply(console, arr);


    bind
    1 改变函数中的this,不会调用函数,而是把函数复制一份
    2 第一个参数 设置函数内部this的指向
    其它参数,对应函数的参数
    3 函数的返回值 call的返回值就是函数的返回值
    4 测试
    var obj = {
    name: 'ww'
    }

    var f = fn.bind(obj, 5, 5);
    f();

    bind的应用

    var obj = {
    name: 'zs',
    fun: function() {
    setInterval(function() {
    console.log(this.name);
    }.bind(this), 1000);
    }
    }
    obj.fun();

    btn.onclick = function () {
    // 事件处理函数中的this 是触发该事件的对象

    // 通过bind 改变事件处理函数中this的指向
    }.bind(obj);

  • 相关阅读:
    Jenkins历史构建作业jobs的删除与管理
    Redis消息队列与主流的消息队列中间件对比
    GDAL数据模型
    Android的语言切换
    GDAL驱动实现向导
    Win7 安装IIS
    局域网中其他机器不能访问本机IIS网站
    DXF库(dxflib)使用指南
    GDAL中文学习资料
    QT的中文站址
  • 原文地址:https://www.cnblogs.com/pxxdbk/p/12661378.html
Copyright © 2011-2022 走看看