还是几个问题,关于window、apply的。

Longerandlonger 2011-07-11 05:03:57

function adApplyDemo(x)
{
return x;
}

function helloworldFunc(args)
{
args[0] = "hello " + args[0];
return args;
}

alert(adApplyDemo("world")); // 输出 world

var oldFunc = window["adApplyDemo"];

window["adApplyDemo"] = function()
{
return oldFunc.apply(this, helloworldFunc(arguments));
}

alert(adApplyDemo("world")); // 输出 hello world

问题一:window["adApplyDemo"]这种是什么用法?window是一个数组之类的东西吗?

问题二:我把“return oldFunc.apply(……)”改为“return window["adApplyDemo"].apply(……)”,为什么会报错?

问题三:为什么输出不是“world”,而是“hello world”了?

问题四:据说 call 和 apply 很像,在这里如何用 call 取代 apply ?


...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longerandlonger 2011-07-13
  • 打赏
  • 举报
回复
好的,谢谢各位牛人。
Longerandlonger 2011-07-12
  • 打赏
  • 举报
回复
谢谢各位的回复,问题二、三、四已经弄懂了,但是问题一还是有点不明白。

这里 window 是一个对象,adApplyDemo 是一个函数名,然后 window["adApplyDemo"] 是什么?
feifeigrace 2011-07-12
  • 打赏
  • 举报
回复
6楼说的对
MadEric 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 longerandlonger 的回复:]

谢谢各位的回复,问题二、三、四已经弄懂了,但是问题一还是有点不明白。

这里 window 是一个对象,adApplyDemo 是一个函数名,然后 window["adApplyDemo"] 是什么?
[/Quote]

js中function也可以看成一个对象。 在最外层定义function a(){...},相当于给window对象添加了一个a的属性,可以使用window.a或者 window["a"]。
建议网上搜一下js的function,看完就懂啦
豆虫 2011-07-11
  • 打赏
  • 举报
回复
问题1:对象的一种属性访问方式 window["adApplyDemo"] 相当于 window.adApplyDemo

问题2:就像2楼说的 你要换成“return window["adApplyDemo"].apply(……)”就永远也出不来了 自己一直在调用自己

问题3:为什么会输出hello world
oldFunc.apply(this, helloworldFunc(arguments));
这句话是执行了helloworldFunc(arguments)这个函数 把当前arguments当作参数传入
alert(adApplyDemo("world")); 这个world就是arguments[0]
也就是helloworldFunc函数的args[0]
function helloworldFunc(args)
{
args[0] = "hello " + args[0]; return args;
}


问题4:apply和call他俩一样的 只不过是参数不一样 例:
....apply(this,[参数是一个数组形式])
....call(this,a,b,c...) 有几个参数写几个参数 没有要求
lsw645645645 2011-07-11
  • 打赏
  • 举报
回复
看了楼主的几个贴,对楼主的学习精神表示强烈的支持。
挨踢直男 2011-07-11
  • 打赏
  • 举报
回复
1、不是数组,是对象 ,javascript中对象可以如 object["名字字符串"]这样的访问属性
2、因为你在 运行到 alert(adApplyDemo("world")); 他其实是个递归,其实就是这个样子
window["adApplyDemo"] = function()
{
return window["adApplyDemo"]("..................");
}
这个递归永远也绕不出来了
3、 function helloworldFunc(args)
{
args[0] = "hello " + args[0];
return args;
}
因为这里,你仔细按照顺序看看
4、 function adApplyDemo(x,y)
{
return x+y;
}

var o = {};
alert( adApplyDemo.call(o,"1","2"))
alert(adApplyDemo.apply(o,["1","2"]))
这样就有区别了

87,990

社区成员

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

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