2010-12-07 4 views
0

나는 라파엘의 소스를 통해 찾아 봤는데 - source라파엘은 왜 [적용] 객체를 사용합니까?

그들은

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은 메소드의 이름을 보유하는 변수 여야하므로 변수 이름을 가진 객체 메소드를 호출하는 방법입니다. 따라서 항상 apply() 메서드를 호출하므로 object.apply()과 동일하지 않습니다. 도트 표기법을 사용

var apply = 'foo'; 
object[apply](); // calls object.foo() 
관련 문제