apply和call函数的区别(bind)
相同点:call和apply 都是用来修改函数中this的指向问题
想要修改this 的指向,那么必然有一个this修改后的指向,而函数必然后关系到传参问题,对于除了第一个参数的后面的参数:
1.call方法传给该函数的多个参数必须逐个例举出来;
2.apply方法将传给该函数的参数合并成一个数组作为自己的一个参数或者逐个例举
例如:将函数内this指向由前面person.sayHobby转变为后面的person
var name = 'nihao';
var person = {
name: 'lihua',
sayIntroduce: function () {
return this.name ;
},
sayHobby: function (val1,val2) {
return this.name ;
};
}
var person1 = {
name: 'jms'
}
console.log(person.sayIntroduce()); // lihua
console.log(person.sayHobby.call(person1, 'swimming', 'hiking')); // jms
console.log(person.sayHobby.apply(person1, ['swimming', 'hiking'])); //jms
特殊情况
如果,call和apply不传参,this就指向window
另外说一下bind函数,这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。例如:
window.color="red";
var o={ color: "blue"};
function sayColor(){
alter(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor();