拉斐尔为什么使用对象[apply]?

时间:2010-12-07 08:43:22

标签: javascript

我一直在浏览Raphael来源 - source

他们似乎在使用     

object[apply](obj, args)

我假设

等同于

object.apply(obj, args)

我假设正确吗?如果是这样,他们为什么要这样做?

由于

修改

正如@deceze所说,apply是一个变量,因此它不等同。但是,在第38行,他们将字符串"apply"分配给变量apply,因此这使其等效。你为什么要这样做?

2 个答案:

答案 0 :(得分:4)

使用点符号实际上只是object[propertyname]的语法糖,但它有一个缺点,属性名称不能缩小。

通过

var apply = "apply";
foobar[apply](.....
foobar[apply](.....
foobar[apply](.....
foobar[apply](.....

这实际上可以缩小为

var a = "apply";
b[a](.....
b[a](.....
b[a](.....
b[a](.....

而且你的理由是,Raphael使用[]符号来提供更好的缩小。

答案 1 :(得分:2)

在这种情况下,apply应该是一个包含方法名称的变量,因此这是一种使用变量名称调用对象方法的方法。因此,它不等同于object.apply(),因为它总是调用apply()方法。

var apply = 'foo';
object[apply](); // calls object.foo()