相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向。
区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的。
bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向。
MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个以及以后的参数加上绑定函数运行时本省的参数按照顺序作为原函数的参数来调用原函数。
如果只是想改变上下文环境,而非执行该函数,则使用bind()方法,call()或apply()方法会立即执行该函数。
Demo:
(function(){ var obj = { id: 1, name: ‘Object‘, show: function(){ console.log(‘编号为:%d,姓名为:%s‘, this.id, this.name); } }; obj.show();//编号为:1,姓名为:Object var lili = { id: 2, name: ‘LiLi‘ }; obj.show.call(lili);//编号为:2,姓名为:LiLi obj.show.apply(lili);//编号为:2,姓名为:LiLi obj.show.bind(lili)();//编号为:2,姓名为:LiLi })();
应用:
(function(){ var arr1 = [1, 3, 5, 7, 9]; //最大值: console.log(Math.max.apply(null, arr1));//9 //最小值: console.log(Math.min.apply(null, arr1));//1 var arr2 = [‘a‘, ‘b‘, ‘c‘, ‘d‘]; //数组追加 Array.prototype.push.apply(arr1, arr2); console.log(arr1);// [1, 3, 5, 7, 9, "a", "b", "c", "d"] })();
时间: 2024-11-05 11:57:01