美文网首页
call,bind,apply 的使用和理解

call,bind,apply 的使用和理解

作者: 达文西_Huong | 来源:发表于2020-06-17 11:09 被阅读0次

    看完你就懂的 call,bind,apply的区别和使用 【转载】

    原文:https://www.runoob.com/w3cnote/js-call-apply-bind.html


    先上图


    image
        obj.objAge;   // 17
        obj.myFun()   // 小张年龄 undefined
    
    image
        shows()  // 盲僧
    

    比较这两者的this的差别。第一个打印的this 指向 obj, 第二个全局声明的 shows() 函数 this 是window;

    1. call(),apply(),bind() 都是用来重定义 this 这个对象的

    如:


    image
        obj.myFun.call(db);      // 玛德年龄 99
        obj.myFun.apply(db);     // 玛德年龄 99
        obj.myFun.bind(db)();      // 玛德年龄 99 
    

    得出结论,除了bind需要主动调用以外,其他的结果返回都是一致的。
    这样可以知道。bind返回的是一个新的函数,需要手动去调用它。

    2. 对比call,bind,apply 传参情况下

    image
        obj.myFun.call(db,'成都','上海');     // 玛德 年龄 99 来自成都去往上海
        obj.myFun.apply(db,['成都','上海']);  // 玛德 年龄 99 来自成都去往上海
        obj.myFun.bind(db,'成都','上海')();   // 玛德 年龄 99 来自成都去往上海
        obj.myFun.bind(db,['成都','上海'])(); // 玛德 年龄 99 来自 成都,上海 去往 undefined
    

    从上面我们可以看出 call bind apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了

    call 的参数是直接放进去的,参数之间用逗号隔开
    apply 的参数必须是存放在数组里面
    bind 除了返回是函数外,它的参数和call一样。

    当然,三者的参数不限定是string类型,也可以是其他的类型包括函数/对象

    相关文章

      网友评论

          本文标题:call,bind,apply 的使用和理解

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