大家好,小弟刚入门,看书的时候偶然发现这么一句话,便感觉到非常疑惑,可能是小弟理解有问题:fun.apply(obj,b)的作用就是让被调用的函数fun的this指向obj,但是这句话里fun函数本来就属于this,如果这样调用“this.fun(args)”也能够达到相同的效果,为什么要使用apply呢?javascript
解决方案 »
- 关于一个WEB的问题。
- 怎样比较多个标签获取并获得最低高度的对象
- 请问如何获取多行select下拉位置
- 关于得到option.label的值的问题!
- 怎样设置xp iis的在线用户数量,iis运行一段时间后总是down,提示“目前访问网站的用户过多”
- 如何获取C:\Documents and Settings\LMa\Local Settings\Application Data?高手救命!
- 如何获得Td的行数 !!
- div 的位置是怎么定的?
- sencha touch 2.4 selectfield和datepickerfield控件单击只显示cancel和done按钮,不显示列表中内容和日期选择列表
- HTTP Status 500 小白求教
- js 正则表达式 除数字和小数点(.)以外的字符,用正则表达式怎么写?
- ie6变量函数无效,ie7、8、9可以
例:
obj1={msg:1};
obj2={msg:2};
function show(){ alert( this.msg ) }
show.apply(obj1);
show.apply(obj2)
name : 'obj1 name'
} , obj2 = {
name : 'obj2 name'
} , name = 'window name';
function applyDemo(){
alert(this==obj1);
alert(this==obj2);
alert(this==window);
alert(this.name);
}
applyDemo();//this默认指向window对象
applyDemo.apply(obj1);//用apply改变作用域,使this指向obj1
applyDemo.apply(obj2);//用apply改变作用域,使this指向obj2
运行上面一段代码应该就明白了吧,和apply功能类似的还有一个call,它们两者的区别就是传参方面,apply接受一个数组,call接收不是。
如果这两个地方的this相等,就是等价的
但是这也很奇怪,他们都不直接写this.fun()而写this.fun.apply(this,args),可能是参数用数组传入的缘故罢