垃圾回收站

January 15, 2008

关于JavaScript中apply与call的用法意义及区别

[ 分类: Javascript ] 由 弗里曼·潘 发表于 3:54 am 评论( 0 )

http://www.cnblogs.com/beyondnet/archive/2007/12/06/985216.html

JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。

先来看看JS手册中对call的解释:
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[, [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2, , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。

引用网上一个代码段,运行后自然就明白其道理。
<input type=”text” id=”myText” value=”input text”>
<script>
function Obj(){this.value=”对象!”;}
var value=”global 变量”;
function Fun1(){alert(this.value);}

window.Fun1(); //global 变量
Fun1.call(window); //global 变量
Fun1.call(document.getElementById(’myText’)); //input text
Fun1.call(new Obj()); //对象!
</script>

call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:
<script>
var func=new function(){this.a=”func”}
var myfunc=function(x){
var a=”myfunc”;
alert(this.a);
alert(x);
}
myfunc.call(func,”var”);
</script>

可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。

对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])

同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。


January 13, 2008

总有一种力量让我们泪流满面

[ 分类: 社会 ] 由 弗里曼·潘 发表于 1:06 am 评论( 0 )

难忘《南方周末》1999年新年致词:总有一种力量让我们泪流满面

这是新年的第一天,这是我们与你见面的第777次。祝愿阳光打在你的脸上。
阳光打在你的脸上,温暖留在我们的心里。这是冬天里平常的一天。北方的树叶已经落尽,南方的树叶还留在枝上,人们在大街上懒洋洋地走着,或者急匆匆地跑着,每个人都怀着自己的希望,每个人都握紧自己的心事。

没有什么可以轻易把人打动,除了正义的号角。当你面对蒙冤无助的弱者,当你面对专横跋扈的恶人,当你面对足以影响人们一生的社会不公,你就明白正义需要多少代价,正义需要多少勇气。

没有什么可以轻易把人打动,除了内心的爱。没有什么可以轻易把人打动,除了前进的脚步…… 这是新年的第一天,就象平常一样,我们与你再次见面,为逝去的一年而感怀,为新来的一年作准备。祝愿阳光打在你的脸上。

阳光打在你的脸上,温暖留在我们的心里。有一种力量,正从你的指尖悄悄袭来,有一种关怀,正从你的眼中轻轻放出。在这个时刻,我们无言与对,惟有祝福:让无力者有力,让悲观者前行,让往前走的继续走,让幸福的人儿更幸福;而我们,则不停为你加油。

我们不停为你加油。因为你的希望就是我们的希望,因为你的苦难就是我们的苦难。我们看着你举起锄头,我们看着你舞动镰刀,我们看着你挥汗如雨,我们看着你谷满粮仓。我们看着你流离失所,我们看着你痛哭流涕,我们看着你中流击水,我们看着你重建家园。我们看着你无奈下岗,我们看着你咬紧牙关,我们看着你风雨度过,我们看着你笑逐颜开……我们看着你,我们不停为你加油,因为我们就是那你们的一部分。

总有一种力量它让我们泪流满面,总有一种力量它让我们抖擞精神,总有一种力量他驱使我们不断寻求”正义、爱心、良知”。这种力量来自于你,来自于你们中间的每一个人。

所以,在这样的时候,在这新年的第一天,我们有向你、向你身边的每一个人,说一声,”新年好”!祝愿阳光打在你的脸上。

因为有你,才有我们。

阳光打在你的脸上,温暖留在我们的心里。为什么我们总是眼含泪珠,因为我们爱得深沉;为什么我们总是精神抖擞,因为我们爱得深沉;为什么我们总在不断寻求,因为我们爱得深沉。爱这个国家,还有她的人民,他们善良,他们正直,他们懂得互相关怀。


Next Page »