JavaScript中call()、apply()、bind()
2019-10-20 本文已影响0人
西瓜鱼仔
call()、apply()、bind() 都是用来改变this指向的。
关于this 详解,可以看我另一篇文章JavaScript中this 的详解。
首先看如下代码:
<script>
var student = {
name:'小明',
showName:function () {
console.log(this.name)
}
};
var a = {
name:'小暗'
};
student.showName();
student.showName.call(a);
student.showName.apply(a);
student.showName.bind(a)();
</script>
最后打印结果为:
由此可见,call()、apply()、bind()都改变了函数中this 的指向,让this指向了对象a。
call()
call() 方法的第一个参数是this所要指向的那个对象,如果设为null或undefined或者this,则等同于指定全局对象。
第一个参数后面是函数调用时需要传递的参数。
function b(a, b) {
console.log(a + b);
}
b.call(null, 1, 2); // 打印结果为:3
call 后面传递的参数是以逗号的形式分开的。
apply()
apply 方法的第一个参数也是this所要指向的那个对象,如果设为null或undefined或者this,则等同于指定全局对象。
第二个参数则是一个数组,该数组的所有成员依次作为参数,在调用时传入原函数。
function b(a, b) {
console.log(a + b);
}
b.apply(null, [3, 4]); // 打印结果为7
bind()
bind 方法返回的是一个函数形式,如果要执行,则后面要再加一个小括号,例如:bind(obj,参数1,参数2)()
,
传递的第一个参数是this所要指向的那个对象,后面参数只能以逗号分隔形式,不能是数组形式。
function b(a, b) {
console.log(a + b);
}
b.bind(null, 3, 4)(); // 打印结果为7