冒充方法call和apply 简述

<!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>


本文出自 “一只WEB菜鸟的自白” 博客,请务必保留此出处http://6852489.blog.51cto.com/6842489/1570917

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。