call 、apply、bind的区别

众所周知在js中this的指向是可以改变的,而call、apply、bind都是可以做到的,那么我们今天就来讲讲他们的用法以及区别

1.call方法

               let o = {
            name:'zhangsan'
        }
        function fn(a,b){
            console.log(this.name)  //---zhangsan
            console.log(a+b)  //---5
            return a+b
        }
        fn.call(o,2,3)
        console.log(fn.call(o,2,3)) // ---5

call最基本的用法就是函数式调用,它相当于调用了这个函数,返回值为函数的返回值,第一个参数为函数运行你需要指定的this,后面的参数为函数本身的传参,所有的参数用逗号隔开

2.apply方法

        let o = {
            name:'zhangsan'
        }
        function fn(a,b){
            console.log(this.name)  //---zhangsan
            console.log(a+b)  //---5
            return a+b
        }
        fn.apply(o,[2,3])
        console.log(fn.apply(o,[2,3])) // ---5

apply方法也是函数式调用,返回值也是函数的返回值,和call不同的是他的第二个参数也就是函数本身的参数必须是数组

3.bind方法

       let o = {
            name:'zhangsan'
        }
        function fn(a,b){
            console.log(this.name)
            console.log(a+b)
            return a+b
        }
        let fn1 = fn.bind(o,2,3)// ---函数体
        fn1() // 5

bind的使用方法和call类似,区别是bind不会调用函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容