2010-12-07 33 views
0

我一直在尋找通過拉斐爾源 - sourceRaphael爲什麼使用object [apply]?

他們似乎使用

object[apply](obj, args)

這我假設相當於

object.apply(obj, args)

我是假設是否正確?如果是的話,他們爲什麼要這樣做?

感謝

編輯

由於@deceze說應用是一個變量,因此它是不等價的。但是,在第38行,他們將字符串"apply"分配給變量apply,所以這使得它等價。你爲什麼要這樣做?

回答

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](..... 

而且有你的理由,拉斐爾使用[]符號,以提供更好的縮小。

2

在這種情況下,apply應該是一個保存方法名稱的變量,所以這是一種用變量名稱調用對象方法的方法。因此它不等同於object.apply(),因爲它總是調用apply()方法。

var apply = 'foo'; 
object[apply](); // calls object.foo() 
相關問題