对这个知识点只有一个浅显的认识,记录一下,加深自己的印象!如有错误的地方,希望指正!
call和apply用途: 1.传递参数 2 扩充函数的作用域
格式:fn1.call(obj,num1,num2,num3...) 可以是一个值或者多个值
fn2.apply(obj,[num1,num2,num3]) 值应该放在数组当中,一个或者多个
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
//全局变量,相当于window.names
var names='zhang';
//对象属性名
var obj={names:'wang'};
//函数名大写相当于一个对象,函数本身也是一个对象;
function Object(names){
this.names=names;
}
var a=new Object('sun');
//这个函数将会绑定不同对象
function showName(){
console.log(this.names);
}
/*******************************call使用*********************************************/
//返回全局的作用域
showName();//zhang
//返回obj的作用域
showName.call(obj);//wang
//返回函数(对象)的作用域
showName.call(a,'sun');//sun
/*通过上面的小例子可以知道,call绑定在哪个对象上面就可以使用当前的作用域*/
/*******************************call使用*********************************************/
/*******************************apply使用*********************************************/
//apply()几乎一样,只是传递参数的格式不一样
showName();//zhang
showName.apply(obj);//wang
showName.apply(a,['sun']);//sun 必须放在数组当中,一个或者多个
/*******************************apply使用*********************************************/
</script>
</body>
</html>