2010-07-28 7 views
0

자바 스크립트 객체 모델 (프로토 타입 기반)에 익숙하지 않고 다음을 수행하려고합니다.자바 스크립트 개체/배열 질문?

간단히 배열을 초기화하는 생성자가 있습니다 : this.myArray = [].

MyConstructor.prototype.addToArray = function(myObject, type) { 
    // 
}; 

은 기본적으로 내가 특정 type에 부착 할 myArray 필요 : 나는 방법이있다. 나는. addToArray()이 호출되면 객체는 type과 연결된 배열에 추가됩니다. 나는 가능한 모든 유형을 사전에 알고 싶지 않다. 또한 특정 유형의 객체를 보유하고있는 배열을 지우는 메소드를 추가해야 할 필요가 있습니다. 그래서 기본적으로 타입과 관련된 배열을 어떻게 든 동적으로 생성해야한다고 생각합니다.

도움을 주시면 감사하겠습니다.

제 질문은 혼란 스럽기 때문에 자세히 설명하려고합니다. 내 "비즈니스"코드는 내가 추적해야하는 객체를 만듭니다. 각 객체는 특정 "유형"또는 "맛"과 연관됩니다. 배열 (배열 당 형식) 및 이러한 개체에 대한 작업을 처리하는 이러한 개체 참조를 저장하는 처리하는 일반 개체를 만들려고합니다. 그런 다음 조작은 주어진 유형의 모든 오브젝트에서 수행 될 수 있습니다. 미리 유형을 모른 채 (즉, 생성자에서 유형 당 1 개의 배열 생성을 피함)이 작업을 수행 할 수 있기를 원합니다.

"유형"은 무엇이든 가능합니다. 즉 "typeA"또는 "typeB"등의 문자열을 사용하여 다른 클래스의 개체를 구분할 수 있습니다.

+0

귀하의 질문은 혼란 스럽다. JavaScript는 동적으로 입력되므로 ['typeof'] (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/typeof_Operator)에서 얻을 수있는 많은 것들이 실제로는 없습니다. 기본적으로 균질 배열 만들기에 대해 이야기하고 있습니까? 하나의 배열은 문자열을 저장하고, 다른 하나는 숫자를 저장하는 등의 작업을 수행합니까? –

+0

비즈니스 객체에는 "유형"을 식별하는 속성이 있습니까? – Ronald

답변

1

당신은 같은 것을 할 수 있습니다

var objects = {}; 
... 
if (objects[type]) { 
    objects[type].push(myObject); 
} else { 
    objects[type] = [myObject]; 
} 
//...similar methods to delete objects, etc. 
+0

변수를 {}와 (과) 설정하면 어떻게됩니까? 이것이 []와 동일하게 설정하는 것과 어떻게 다른가요? 덕분에 – ewa

+0

{}은 빈 개체입니다. 저는 연관 배열과 같은 것을 사용하고 있습니다 : 객체 [type] = [obj1, obj2, ...]처럼 각 유형의 객체 배열 []을 가지고 있습니다. 이것은 또한 다음과 같습니다 : object = {type1 : [obj1, ...], type2 : [foo, bar, ...]}. – jtbandes

+0

함수 밖에서 나가고 자하는 {} 부분. 나머지는 해당 배열에 객체를 추가하기 위해 내부로갑니다. 미안해, 내가 더 도움이 될 수 없어, 내 휴대폰에 이것을 입력하고있어 ... :) – jtbandes

1

질문을 올바르게 해석했다면 JavaScript 배열이 입력되지 않았으므로 원하는 것을 할 수 없습니다. 어떤 유형의 객체라도 배열에 넣을 수 있습니다.

편집 : 당신이 당신의 객체 생성자의 이름과 일치하는 특성을 가진 개체를 가질 수처럼

당신의 갱신에 비추어, 그것은 소리. 각 속성에는 속성 이름과 일치하는 생성자로 만든 개체를 포함하는 배열이 포함됩니다. 예를 들어

,이 방법으로

function Cache() {} 

Cache.prototype.add = function (obj) { 
this[obj.constructor.name] === undefined? this[obj.constructor.name] = [obj] : 
this[obj.constructor.name].push(obj); 
} 

function Constructor1(name, age) { 
    this.name = name; 
    this.age = age; 
} 

var cache = new Cache; 
var con1 = new Constructor1('me', 10); 
cache.add(con1); 

console.log(cache) // has property 'Constructor1' containing an array with reference 
        // to object con1 in. 

, 당신은주의와 개체에서 상속 할 때 생성자 이름을 확대해야합니다.