美文网首页
call(),apply()和bind的区别

call(),apply()和bind的区别

作者: 子涵_520 | 来源:发表于2018-12-13 16:37 被阅读0次

    我们来看下面的一段代码


    微信图片_20181213160205.png

    上面的代码就是say()的调用方法其实是window,所以this.name就是指的是window,如果我想对man进行问候呢,这时候就要用到call(),apply(),bind(),这三个方法实际上就是函数原型链 Function.prototype 上的方法,每个函数都拥有的,主要用来改变函数的 this 指向。下面就解析这三者的区别

    call()的使用

    微信图片_20181213161200.png
    call 语法

    fun.call(this.Arg,arg1,arg2,....);
    thisArg 表示 this 指向,如果为 null 和 undefined 则指向全局对象。后面的为参数列表。

    apply()的使用

    微信图片_20181213161642.png
    apply 语法

    fun.apply(this.Arg,[argsArray]);这里的argsArray不仅仅可以是数组也可以是类数组的对象
    let params = {
    name:"zhangsan",
    age:12.
    }
    fun.apply(this.Arg,[params]);
    apply的传递参数的方式也可以使用es6语法...然后用call代替,如:fun.call(this.Arg,...[arg1,arg2,....])

    bind()的使用

    微信图片_20181213162640.png
    bind 语法

    fun.apply(this.Arg[,arg1[,arg2[,....]]]);
    但是作用却不一样
    可以看到,不像 call 和 apply,bind 并非是立即执行的,而是会新生成一个新的方法,之后可随意调用。当然也可以提前将参数 bind 进去

    相关文章

      网友评论

          本文标题:call(),apply()和bind的区别

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