JavaScript 函数中的call和apply方法

JavaScript 函数的call和apply方法

鉴于JavaScript中函数的特殊性,我们可以把函数看作是特殊的对象,因此可以将callapply看作是某个对象的方法,通过调用对象方法的形式简洁调用函数。

callapply的第一个参数是要调用函数的母对象,他就是调用函数的上下文,在所要调用函数的内部,我们可以使用this关键字获取对传入的第一个对象的饮用。

function func1(){
	this.func();
}
var o ={};
o.func = function (){
	console.log("Called by o.");
}
var b ={};
b.func = function (){
	console.log("Called by b.");
}
func1.call(o);
//Called by o.
func1.apply(b);
//Called by b.

ECMAScript 5的严格模式中,callapply的第一个实参都会变成this的值——this就是第一个实参,哪怕传入的第一个参数是null或者undefined
而在ECMAScript 3和非严格模式中,传入的nullundefined都会被被全局对象所取代

function a(){
	console.log(this);
}
a.call(null);
//window.xx

call来说,第一个调用上下文实参之后的所有实参都是要传入所要调用的函数的参数的值。以对象obj的方法调用func函数,可以用下面的形式:

/* obj是对象, params是相关参数,可能有多个 */
func.call(obj, parmas);

applycall稍有不同,出了第一个参数相同之外, 其余的参数以数组的形式传入,例如:

var obj = {};
obj.func = (args) => {
	var sum=0;
	return args.reduce((x, y) => {return x+y},0);
}
buffer=[1,2,3,4];
func.apply(obj, buffer);
//10
function func(){
	this.func(buffer);
}

注意,apply的第二个参数出了可以传递数组还可以传入类数组对象,例如函数中的arguments

function trace(o,m){
	var original = o[m];
	o[m] = function(){
		console.log(new Date(),"Entering: ",m);
		var ret = original.apply(this,arguments);
		//这里的this指向对象o
		//this==o :true
		console.log(new Date(),"Exiting: ",m);
		return ret;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值