<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>call</title>
<script type="text/javascript">
// 入门
function sub(x,y){
return x-y;
}
function plus(x,y){
return x+y;
}
alert(plus(2,1)); //正常执行相加
alert(sub.apply(plus,[2,1])); //使用apply方法,让plus冒充sub,执行相减(这里的[]一定要加)
// 进阶
function sub(x,y){
return x-y;
}
function plus(x,y){
return sub.apply(this,[x, y]); //直接将冒充方法写在函数体内,减少冗余
}
alert(plus(2,1)); //执行相减
//再次进阶
function sub(x,y){
return x-y;
}
function plus(x,y){
return sub.apply(this,arguments); //用内置的arguments变量自动查找所有参数
}
function plusForCall(x,y){
return sub.call(this,x,y); //使用call方法,让plusForCall冒充sub,执行相减(这里的[]一定不能加),
//这就是call和apply的区别
}
function plusForCallByArgument(x,y){
return sub.call(this,arguments); //***这个方法是错误的call方法内不能使用arguments变量
}
//综上所述,当我们使用冒充方法的时候,有参数的时候使用apply,无参数的时候使用call
//用冒充方法扩大作用域
var color="blue";
var goods={
color:"red"
};
function getColor(){
alert(this.color);
}
getColor(); //直接使用是blue,因为this在全局环境中,就代表window
getColor.call(goods); //冒充goods,这时的this代表goods
</script>
</head>
<body>
</body>
</html>