1. call、apply和bind的区别
call、apply和bind方法都是函数对象中的方法,用来动态地改变函数中this的指向,只是用法不同。call和apply被调用时,不仅改变函数中this指向,而且执行该函数,但bind仅仅是改变函数中this的指向,并不执行。
var x = 2;
var y = 3;
function getY(){
console.log(this.y)
}
var o = {
x: 1,
y: 4,
getX: function(){
console.log(this.x)
}
}
o.getX.call() //2
getY.bind(o)() // 4
call、apply和bind方法在未传入指定对象时,默认传入window 对象,因此,o.getX.call() 输出结果是2。使用bind方法时,仅仅改变函数中this指针的指向,而要执行需要在后面添加'()'。call 和 apply方法在使用时,除了第一个指定this对象的参数外,后面还可以添加原油函数的其他参数,call方法接受单个参数的罗列,而apply方法接受数组格式的参数(arguments对象也可以)。如下:
fn.call(o, param1,param2)
fn.call(o,[param1,param2])