• Javascript中call、apply、bind函数


    javascript在函数创建的时候除了自己定义的参数外还会自动新增this和arguments两个参数

    javascript中函数也是对象,call、apply、bind函数就是函数中的三个函数,这三个函数的作用就是改变调用当前函数中this指向。

    call、apply、bind三个函数接收两个参数,第一个参数都是函数执行指向对象的this,第二参数是函数执行传递的参数数据,call和bind传递数据是变长参数,apply传递数据是数组。call和apply是立即执行的,而bind是返回一个函数,返回函数执行时才执行

    有点绕,看例子

    1、对象中函数

    var obj={
    x:0,
    func:function(par1,par2){
    this.x=par1+par2;
    }
    }

    obj.x;//0

    obj.func(1,2);

    obj.x;//3

    改变obj.func函数中this指向window

    call方式:obj.func.call(window,3,3);或obj.func.call(null,3,3);//第一个参数为null也是指向window

        window.x;//6

    apply方式:obj.func.apply(window,[3,4]);或obj.func.apply(null,[3,4]);

        window.x;//7

    bind方式:var f=obj.func.bind(window,5,5);或var f=obj.func.bind(null,5,5);

        f();window.x;//10

    改变obj.func函数中this指向新对象var o={};

    调用方式和上面一样,只是把window或null换成o,调用o.x

    2、普通函数

      var f=function或function f都一样,用function f方式举例

    function f(x,y){
    this.result=x+y;
    }

    f(1,2);

    result;//3,此时this指向window,window.result也是3

    改变f指向新对象

    var o={};

    f.call(o,2,3);

    o.result;//5,此时并没有改变window.result值,window.result值仍然为3

     f.apply和f.bind与对象中函数调用一样,不赘述

    此处要说明的是如果用构造函数创建对象,则函数中的this指向构造函数返回的新对象

    var ff=new f(6,6);

    ff.result;//12

    var fff=new f(7,7);

    fff.result;//14

  • 相关阅读:
    vue中的watch
    css渲染层次理解及实际问题
    css中一些设计总结
    python打包文件(nuitka)
    vue实现前后端文件的上传和下载
    pyqt5使用多线程避免程序假死
    使用python编写shell脚本并运行
    记录一下WordNet多线程下的bug
    利用多线程对大数组进行处理
    nginx配置静态文件
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/5465789.html
Copyright © 2020-2023  润新知