this指向,call,apply,bind的区别

333 阅读1分钟

this指向: ①普通函数调用时,this指向window; ②构造函数调用时,this指向实例对象 ③对象方法调用时,this指向该方法所属的对象; ④通过事件绑定的方法,此时this指向的是绑定事件的对象; ⑤定时器函数,this指向的是window;

call,apply,bind的相同点: ①都是改变this指向的, ②第一个参数都是this要指向的对象 ③都可以利用后续参数传参

call,apply,bind的区别: call和bind的参数是依次传参,一一对应的;但apply只有两个参数,第二个参数为数组; call和apply都是对函数进行直接调用,而bind方法返回的仍是一个函数。

例如:
var a ={
	name:'梦梦',
	age:'22',
	sex:'女',
	hobby:'写代码'
	say:function(sex,hobby) {         
		console.log(this.name,this.age,sex,hobby)      
	}
}
var b = {
	name:'臣臣',
	age:'23',
}
a.say.call(b,'男','学习');
a.say.apply(b,['男','学习'])
bind可以向cally一样传参:
例如:
a.say.bind(b,'男','学习')();
但由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
例如:
a.say.bind(b)('男','学习');
//结果为:"臣臣","23","男","学习"