读书人

各浏览器对apply第二个参数的兑现差异

发布时间: 2012-12-28 10:29:05 作者: rapoo

各浏览器对apply第二个参数的实现差异

每个函数都有个apply方法,该方法有两个作用:
1,改变函数的执行上下文(第一个参数非null,undefined)。
2,执行/调用该函数。

apply方法第二个参数一般认为被实现为数组,见经典的《javascript权威指南-第五版》中章节8.6.4,145页:

"apply()方法和call()方法相似,只不过要传递给函数的参数是由数组指定的:"

和641页关于Function.apply中提到args为一个数组。

?

权威指南中这个说法不太严谨,甚至自相矛盾。因为apply的第二个参数可以是arguments,而arguments并非数组。关于arguments非数组在权威指南章节8.2.2中提到。下面分别测试下

1var obj = {0:'zero',1:'one',length:2,constructor:Array}2function fun(){3????alert(arguments[0]);4}5fun.apply(null,obj);

即使obj看起来已经很象一个数组了,但除了Opera正常运行,仍然欺骗不了IE6/7/8/Firefox/Chrome/Safari,看来只有IE9/Opera与众不同。

读书人网 >编程

热点推荐