这三个方法都可以用来设置函数体内的this对象的值。 apply()方法接收两个参数:函数内this的值和一个参数数组。第二个参数可以是Array的实例,但也可以是arguments对象。
function sum(num1, num2) {
return num1 + num2;
}
function callSum1(num1, num2) {
return sum.apply(this, [num1, num2])
}
function callSum2(num1, num2) {
return sum.apply(this, arguments);
}
console.log(callSum1(10, 10)); // 20
console.log(callSum1(10, 10)); // 20
call()方法与apply()方法的不同之处在于传参的形式不同,call的第一个参数与apply()一样,都是this值,而传给被调用的函数的参数是逐个传递的。
window.color = 'red';
let o = {
color: 'blue'
};
function sayColor() {
console.log(this.color);
}
sayColor(); // red
sayColor.call(this); // red
sayColor.call(window); // red
sayColor.call(o); // blue
bind()方法会创建一个新的函数实例,其this值会被绑定到传给bind()的对象。如:
window.color = 'red';
var o = {
color: 'blue'
}
function sayColor() {
console.log(this.color);
}
let objectSayColor = sayColor.bind(o);
objectSayColor(); // blue