call()、 apply()、 bind() 都是用来重新定义this对象的指向
看段代码:
语法格式:
fn.call(obj, 4,2)
fn.apply(obj, [4, 2])
fn.bind(obj, 4, 2)()
fn.bind(obj, [4, 2])()
第一个参数都是this的指向对象
var obj = {
name: 'Nanchen'
}
function fn(a, b) {
console.log(this); //此处的this指向的是obj
console.log(a + b);
}
fn.call(obj, 4,2)
fn.apply(obj, [4, 2])
fn.bind(obj, 4, 2)()
fn.bind(obj, [4, 2])()
效果:
由此可见:
1.能够调用函数
2.能够改变普通函数的this指向并能够传参
3.这三种方法的使用是一致的 只是传参的方式不同
call()可以直接传参 而apply()需要传数组
call、、apply和bind的区别:
区别:call和apply改变了函数的this上下文后便执行该函数,而bind则是返回改变了上下文后的一个函数。
call和apply的区别:
他们俩之间的差别在于参数的区别,call和apply的第一个参数都是要改变上下文的对象,而call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数。