this.fun.apply(this,args)的问题

waksana 2013-01-11 07:21:22
大家好,小弟刚入门,看书的时候偶然发现这么一句话,便感觉到非常疑惑,可能是小弟理解有问题:

fun.apply(obj,b)的作用就是让被调用的函数fun的this指向obj,但是这句话里fun函数本来就属于this,如果这样调用“this.fun(args)”也能够达到相同的效果,为什么要使用apply呢?
...全文
502 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
waksana 2013-01-11
  • 打赏
  • 举报
回复
谢谢,我看很多地方这么写,还以为有什么特殊之处。 但是这也很奇怪,他们都不直接写this.fun()而写this.fun.apply(this,args),可能是参数用数组传入的缘故罢。。。
fzfei2 2013-01-11
  • 打赏
  • 举报
回复
this.fun.apply(this,args)和this.fun 如果这两个地方的this相等,就是等价的
waksana 2013-01-11
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:
其实你已经知道apply的功能了,就是用来改变主体this 例: obj1={msg:1}; obj2={msg:2}; function show(){ alert( this.msg ) } show.apply(obj1); show.apply(obj2)
谢谢,我是知道apply的用法,我就是想问this.fun.apply(this,args)和this.fun是不是等价的?
「已注销」 2013-01-11
  • 打赏
  • 举报
回复


var obj1 = {
  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接收不是。
fzfei2 2013-01-11
  • 打赏
  • 举报
回复
其实你已经知道apply的功能了,就是用来改变主体this 例: obj1={msg:1}; obj2={msg:2}; function show(){ alert( this.msg ) } show.apply(obj1); show.apply(obj2)

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧