mootools学习心得?

当诸如prototype.js、mootools.js、jQuery.js这些框架出现后,在其代码中能看见大量call和apply方法的调用。这里拿mootool中的为例,如:

Array.extend({forEach:function (C, D) {
	for (var B = 0, A = this.length; B < A; B++) {
		C.call(D, this[B], B, this);
	}
}



这段代码的作用是为Array原型扩展forEach这样一个迭代方法。参数C是一个函数,参数D则是我们传入的一个对象。一般性使用例子是:

[1,2,3,4].forEach(function(item){
		alert(item);
})

 结果是:连续的弹出1,2,3,4. 我们在看下面的代码:

var object = "传入的对象";
	[1,2,3,4].forEach(function(item){
		alert(item);
		alert(this);
},object)

 结果是:1,传入的对象,2,传入的对象,3,传入的对象,4,传入的对象, 可以看见传入的object替代了forEach方法中匿名函数中的上下文,所以alert出来的this是"传入的对象"。

[1,2,3,4].forEach(function(item,index,array){
		alert(item);
		alert(this);
		alert(index);
		alert(array);
	})

 

如上代码,item数组中单个数,此数的index值,数组本身。如用apply来代替call代码将如下:

 

Array.extend({forEach:function (C, D) {
	for (var B = 0, A = this.length; B < A; B++) {
		C.apply(D, [this[B], B, this]);
	}
}

 

不同的写法是因为apply和call参数传入的不用: apply第一个参数是要“代替”这个function对象实例中的上下文this,第二个参数是传递给这个funciton对象的所有参数组合而成的数组。call第一个参数作用和apply相同,而第二个参数以后的参数[0个或N个]将传递给这个funciton对象的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值