改变函数内this的指向,js提供了三种方法:
- call()
- apply()
- bind()
1、call()方法
call()的主要作用:调用函数、改变函数内的this指向;可以实现继承。
call(参数一,[参数二],[参数三]…),参数一是this的指向,后面的参数是函数的实参。
<script>
var obj1 = {
name:'zhangsan',
sayHi:function(){
console.log(this);
}
};
var obj2 = {
name:'lisi'
};
obj1.sayHi(); // 此时this指向sayHi的调用者,即obj对象。
obj1.sayHi.call(obj2); // 使用call()方法改变了this的指向,现在指向的是obj2
</script>
2、apply()方法
apply()的主要作用:调用函数,改变函数内的this指向,对其它方法的借用。
apply(参数一,[参数二,参数三…]).
apply()的用法和call()一样,不一样的是apply()的参数需要以数组的方式传递。因为这个特性当操作数组时我们可以对一些数组没有的方法进行借用。
<script>
var obj1 = {
name:'zhangsan',
sayHi:function(){
console.log(this);
}
};
var obj2 = {
name:'lisi'
};
obj1.sayHi(); // 此时this指向sayHi的调用者,即obj对象。
obj1.sayHi.call(obj2); // 使用call()方法改变了this的指向,现在指向的是obj2
obj1.sayHi.apply(obj2,[1,2,3]);// 用法和call()一样,不一样的是参数需要以数组的方式传递
</script>
apply()方法对其它数组没有的方法借用,用法如下:
<script>
var arr = [1,3,9,5];
var max = Math.max.apply(Math,arr);
console.log(max);
</script>
对Math对象中max()方法的借用。