2016-07-25 6 views
0

배열처럼 작동하는 개체 컬렉션을 만들고 싶습니다. 몇 시간 전, 나는 this question을 만들어 나는 나를 도와 준 사람들의 도움으로 다음과 같은 해결책을했다 :Javascript - 부모 속성이 공통 인 개체 컬렉션

Newobj.Collection = function(){ 
    Array.apply(this); 

    for(var i = 0; i < arguments.length; i++){ 
     for(var j = 0; j < arguments[i].length; j++){ 
      this.push(arguments[i][j]); 
     } 
    } 

    return this 
} 

Newobj.Collection.prototype = Object.create(Array.prototype); 
Newobj.Collection.prototype.push = function(o){ 
    Array.prototype.push.call(this, new Newobj.Element(o)); 
} 

그러나, 이것은 부모로부터 연결되지 않은 아이들을 떠난다. 예를 들어,이 컬렉션에 render() 함수가 있다고 가정하면 자식이 일부 HTML을 페이지에 인쇄하게됩니다. S는 해결책이 아니다 한 페이지에서 다른 컬렉션을 설정 할 수 있어야한다

Newobj.Collection.html_container = '#cont'; 

Newobj.Collection.render = function(){ 
    $.each(this, function(i, el){ 
     el.render() 
    }) 
} 

Newobj.Element.render = function(){ 
    $(parent.html_container).html('.......') 
} 

, 그래서 모든 Newobj.Collection에 대한 글로벌 container을 : 글쎄, 내가 좋아하는 뭔가를 말할 수 있었으면한다. 이것은 하나의 예이며, 나는 단지 render() 함수보다 복잡한 프로세스에 이것을 필요로합니다.

누구나 내가 포함하고있는 상위 클래스에 액세스 할 수 있도록 배열을 만들 수 있습니까?

해결책이 JSON.stringify 일 수 있고 서버 측에서 배열로 볼 수 있다면이 질문의 주요 문제는 아니지만 위대 할 수도 있습니다. 지금 배열에 속성을 설정하면 서버 측에 size > 0 인 객체로 간주됩니다.

고맙습니다!

답변

1

는 요소 컬렉션에 대한 참조를 만듭니다

Newobj.Collection.prototype.push = function(o){ 
    Array.prototype.push.call(this, new Newobj.Element(o,this)); 
} 

//element constructor gets as second paramater instance of collection 
Newobj.Element=function(o,collection){ 

    //this.parent in every element is collection reference 
    this.parent=collection; 
} 


Newobj.Element.prototype.render = function(){ 
    $(this.parent.html_container).html('.......') 
} 

또는 전혀 요소 옵션 참조 :

Newobj.Collection.render = function(){ 

    var parent=this; 

    $.each(this, function(i, el){ 
    el.render(parent.html_container) 
    }) 
} 

Newobj.Element.render = function(html_container){ 
    $(html_container).html('.......') 
} 

그러나이 버전은 방법 매개 변수가 필요합니다.

+0

그렇게 생각하지 않았습니까? 나는 그것을 시험해 볼 것이고 그것이 작동 하는지를 볼 때 (내가 읽었을 때), 당신의 대답을 올바른 것으로 표시 할 것이다! 도와 줘서 고마워! – Unapedra

+0

나는 성능 * 가능한 문제를 생각해 냈다. * collection *을 매개 변수로 넣으면 거기에 도착할 때 요소 번호 100은 어떻게됩니까? 이미 99 개의 다른 요소가있는 * parent *라는 속성이 있습니까? 99 번째, 98 요소를 가진 배열을 가진 * parent * 속성을 가질 것인가? – Unapedra

+0

이 매개 변수는 개체 참조이므로 100 개의 개체가 있지만 하나의 개체와 100 개의 참조가되므로 성능상의 문제가 없습니다. –