web开发学习总结之js中的call与apply

结论:call与apply这两个东西功能一致,就是把一个函数里面的this设置为某个对象。区别就是后面的参数的语法。

我们试图在回调函数中,用this表示oDiv对象,这样感觉爽。

animate(oDiv,{"left":600},2000,function(){
	this.style.backgroundColor = "red";
});

但是不行,回调函数中this不是oDiv。
所以我们现在要想一个办法,让callback运行,并且callback里面的this是oDiv。

callback.call(elem);

或者:

callback.apply(elem);

执行callback函数,并且让callback函数中的this关键字为elem。
例子:

var obj = {
	"name" : "树懒",
	"age" : 16,
	"sex" : "男"
}

function xianshixinxi(){
	alert(this.name);
}

//下面这个call语句的含义有两层:
//1. xianshixinxi函数将被调用
//2. 同时这个函数内部的this就是obj了
xianshixinxi.call(obj);

说白了apply、call功能是一样的,功能都是:让函数调用,并且给函数设置this是谁。
call就是英语呼叫的意思,apply是应用的意思。

现在说说区别:

var obj = {
	"name" : "考拉",
	"age" : 18,
	"jiehun" : false
}
function xianshixinxi(a,b,c){
	console.log(this.name);
	console.log(a + b + c);
}

xianshixinxi.call(obj,2,3,4);
xianshixinxi.apply(obj,[2,3,4]);

call和apply功能一样,就是让一个函数里面的this设置为一个对象。
拿上例来说,xianshixinxi函数里面的this就是obj对象。但是我们发现,xianshixinxi这个函数,有参数。那么我们现在又想设置this是谁,又想把参数往里传,此时就有区别了:

fn.call(obj,参数1,参数2,参数3……);

fn.apply(obj,[参数1,参数2,参数3……]);

call需要你用逗号罗列所有参数,但是apply是把所有参数写在数组里面。即使只有一个参数,也必须写在数组里面。

比如:

function showInfo(n){
	for(var i = 1 ; i <= n ; i++){
		console.log(this.name);
	}
}
showInfo.call(obj,10);
showInfo.apply(obj,[10]);

一定不要记混,apply要的是数组,你想啊,ly、ly、ly长得像list,就是数组。

总结一下,这两个东西功能一致,就是把一个函数里面的this设置为某个对象。区别就是后面的参数的语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值