美文网首页
bind,apply,call的作用与区别

bind,apply,call的作用与区别

作者: Beauty_Beast | 来源:发表于2019-12-31 15:43 被阅读0次

三者作用基本一样:都可以动态改变this指向;

这也是好多人平时容易混淆和迷惑的地方;

三者的用法和例子:

bind:

//bind
    const plugin = {

        fun1: function() {
            setInterval(this.fun2, 500);
            // setTimeout(this.fun2, 500);
        },

        fun2: function() {
            this.fun3();
        },

        fun3:function(){
            console.log(1)
        }
    }

    plugin.fun1();

上边这种写法是错误的,fun2中的this是找不到的,因为fun2是在fun1中调用的;
解决:

const plugin = {

        fun1: function() {
            setInterval(this.fun2.bind(this), 500);
            // setTimeout(this.fun2, 500);
        },

        fun2: function() {
            this.fun3();
        },

        fun3:function(){
            console.log(1)
        }
    }

问题解决了,理解一下,我们都听说过一句话,this指向是调用时决定的,刚开始fun1中调用fun2,fun2作为回调函数this指向全局window,window没有方法fun3,所以爆出未定义的错误,使用bind后指定fun2的this是fun1的this,也就是当前作用域中的this(plugin),所以不会报错;
之后说下: 原生js中封装插件,或者分装大方法对象,经常这么使用bind,总有一天你会碰到;
所以bind用在回调方法上,并且回调中使用了this;因为bind会返回一个新的方法;而apply,call并不会,所以这也是bind与其他两个的区别,另外上边 this.fun2.bind(this)和this.fun2.bind()效果一样,bind参数为空时会把当前作用域的this作为第一个参数;
再看看call和apply的区别:

作用一样,只是传参数的形式不一样,call参数逐个传入,apply参数放在一个数组中传入;第一个参数都是需要指向的this;

相关文章

  • this_原型链_继承

    this相关问题 apply、call 、bind的作用以及区别 call、apply和bind方法的用法以及区别...

  • this&原型链&继承

    this 1. apply、call 、bind有什么作用,什么区别? apply、call 、bind 都是用来...

  • this 继承

    1.apply call bind的作用与区别 apply call bind都是用来改变函数执行的上下文,也就是...

  • 关于 this_原型链_继承 相关问题总结

    关于this 1- apply、call 、bind的作用和区别 apply、call 、bind都有改变thi...

  • this原型链和继承

    问题1: apply、call 、bind有什么作用,什么区别 apply、call、bind都作用本质都是改变函...

  • this_原型链_继承

    this 相关 1. apply、call 、bind有什么作用,什么区别 apply、call、bind可以改变...

  • this_原型链_继承

    问题1: apply、call 、bind有什么作用,什么区别? apply和call call apply,调用...

  • this 原型链 继承

    this 相关问题 1.apply、call 、bind有什么作用,什么区别 apply、call 、bind这三...

  • 多种方式实现call/apply/bind

    call/apply/bind 作用: 指定函数作用域上下文(this指向)。 区别: call/apply立即执...

  • this 相关问题

    问题1: apply、call 、bind有什么作用,什么区别 apply call bind 问题2: 以下代码...

网友评论

      本文标题:bind,apply,call的作用与区别

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