2014-03-24 2 views
3

커피 스크립트에서이 작은 코드 스 니펫이 있습니다.개체의 배열 액세스 자바 스크립트

class Collection 

    construct:(@collection=[]) 

이제 배열처럼 개체에 액세스하고 싶습니다.하지만 그렇게 할 때 컬렉션 변수를 가져 오려고합니다. 다른 언어에서 나는이 자바 스크립트에서 할 수있는 방법을 몇 가지 유형과 코드의 ArrayAccess 다음, 현재 등의 방법

obj= new Collection([1,2,3]) 

obj[0] # this should equal 1 

를 구현하거나 불가능

답변

1

을 할 것 중 하나를 커피 스크립트 것입니다. 그걸 위해서 proxy이 필요합니다. 대괄호 표기법은 Collection 인스턴스 (예 : obj["collection"])의 속성 액세스에 불과하기 때문에 "ArrayAccess"선언 기능은 없습니다.

대신, 당신은 할 수 있습니다

  • (예를 들어 jQuery를 그것을하는 것처럼) 요소의 소유자로 Collection 개체 자체를 사용

    class Collection 
        construct:(@collection=[]) 
        at: (i) -> 
        @collection[i] 
    
    obj.at 0 # 1 
    
  • 처럼 getter 함수를 구현합니다. 네이티브 어레이 기능이 느슨합니다. subclass Array to some extent (.length은 자동으로 업데이트되지 않음) 일 수도 있습니다.

    class Collection 
        constructor: (col = []) -> 
        @length = 0 
        for el in col 
         Array::push.call(@, el) 
    
    obj[0] # 1 
    
+0

상기 좋은 생각이다. 아마 foreach 루프를 위해 모두와 결합 될 수 있습니다. –

+1

@Lpc_dark은'주십시오 each''all'는 [ 'every']에 대한 공통 동의어 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every 인) – Bergi