一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">
function Person(name,age){
this.name=name;
this.age=age;
}
function Hooby(food,sport){
this.food=food;
this.sport=sport;
alert(this.name+this.age+","+"最喜吃:"+food+","+"并且喜欢"+sport)
}
var per=new Person("小明","17岁");
Hooby.call(per,"香蕉","跑步");//小明17岁,最喜欢吃香蕉,并且喜欢跑步;
Hooby.apply(per,["香蕉","跑步"]);//小明17岁,最喜欢吃香蕉,并且喜欢跑步;
</script>
</head>
<body>
</body>
</html>
不同的是:
apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
另外:依靠apply和call方法可以获得借用Math的方法,获得某个数组中的最大值或者最小值。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">
var num=[1,2,4,2,3,1,5,7,3,8,9,12,6,2,4,6,23];
// 用apply方法
var minNum=Math.min.apply(Math,num);
var maxNum=Math.max.apply(Math,num);
console.log(minNum);
console.log(maxNum);
// 由于call方法需要例举参数,所以不适用于数组区最大最小值;
var minNum=Math.min.call(Math,2,3,3,2,3,2);
var maxNum=Math.max.call(Math,2,3,1,4,2,3,34,12,3,54,23);
console.log(minNum);
console.log(maxNum);
</script>
</head>
<body>
</body>
</html>