一、this的四种指向
二、改变this指向的方法 call() 、apply()、bind()
在JS中,this一般指向的是当前被调用者,但也可以通过其它方式来改变this指向。
显式绑定this:
call()与 apply()
第一个参数都是this要指向的对象(函数执行时,this将指向这个对象),后续参数用来传实参。
function foo() {
console.log(this.a);
}
var obj = {
a: 2
};
// 将 this 指向 obj
foo.apply(obj); //打印结果:2
1、Obj不传或者为null、undefined时,函数中的this会指向window对象(非严格模式)。
2、传递一个别的函数名时,函数中的this将指向这个函数的引用。
3、传递的值为数字、布尔值、字符串时,this会指向这些基本类型的包装对象Number、Boolean、String。
4、传递一个对象时,函数中的this则指向传递的这个对象。
当函数调用call()和apply()时,函数都会立即执行。
call()和apply()的区别
var persion1 = {
name: "小王",
gender: "男",
age: 24,
say: function (school, grade) {
alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);
}
}
var person2 = {
name: "小红",
gender: "女",
age: 18
}
通过call的参数进行传参:
persion1.say.call(persion2, "实验小学", "六年级");
通过apply的参数进行传参
persion1.say.apply(persion2, ["实验小学", "六年级"]);
call后面的实参与say方法中是一一对应的,而apply传实参时,要封装成一个数组,数组中的元素是和say方法中一一对应的
bind()
bind()是将函数返回,因此后面还需要加()
才能调用。
bind()传参的方式与call()相同。