call、apply、bind的区别

215 阅读1分钟

call、apply、bind的区别 call和apply、bind都是可以修改this的指向,只是bind修改this的指向而并不会立即执行,call和apply都会立即执行并修改this指向,只是他们俩的唯一区别是传给函数的参数call是fn.call(ctx, arg1, arg2,……)的形式,apply是fn.apply(ctx, [arg1,arg2,……]) 下面有两种方法重写bind函数

            Function.prototype.bind = function(ctx) {
                var self = this, args = Array.prototype.slice.call(arguments);
                return function() {
                    return self.apply(ctx, args.slice(1));   
                }
            };

            Function.prototype.myBind = function(ctx, ...args) {
                var self = this
                return function() {
                    return self.call(ctx, ...args)
                }
            }

            function fn(...args){
                console.log(this, args)
                //{a: 1}, [1, 9]
            }
            fn.myBind({a: 1}, 1, 9)
            fn.myBind({a: 1}, 1, 9)()
            fn.bind({a: 1}, 1, 9)