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","男","学习"