我一直在浏览Raphael来源 - source
他们似乎在使用
object[apply](obj, args)
我假设
等同于
object.apply(obj, args)
我假设正确吗?如果是这样,他们为什么要这样做?
由于
修改
正如@deceze所说,apply是一个变量,因此它不等同。但是,在第38行,他们将字符串"apply"
分配给变量apply
,因此这使其等效。你为什么要这样做?
答案 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()