大家好,小弟刚入门,看书的时候偶然发现这么一句话,便感觉到非常疑惑,可能是小弟理解有问题:fun.apply(obj,b)的作用就是让被调用的函数fun的this指向obj,但是这句话里fun函数本来就属于this,如果这样调用“this.fun(args)”也能够达到相同的效果,为什么要使用apply呢?javascript
解决方案 »
- Easyui datagrid 如何取返回的参数
- 怎么js实现excel导出?求帮助!在线等啊!
- jquery 获取选中行中的相关列值
- xmlHttpRequest.responseText包含什么内容?
- 有办法检查ie禁用或启用了javascript
- 关于在vista浏览器7下的xmlhttp
- 想让你一个表格在页面载入后停留两秒钟再消失,请问如何实现?
- 怎么让该位置不变。请看
- 小学生作业测试系统
- 我想做一个简单的导航用JAVASCRIPT,就是当鼠标移上去时,出来一个级连菜单,急!
- 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),可能是参数用数组传入的缘故罢