2014-11-11 25 views
0

JavaScript를 처음 사용하고 사용자 정의 객체의 배열을 만드는 데 문제가 발생했습니다. MVC 개념을 적용하려고합니다. 그래서 내 모델에서 나는이 같은 '노드'개체를 만들려고 :JavaScript의 사용자 정의 객체 배열

내 컨트롤러에서
interFace.createNode = function(name) { 
    debug('createNode'); 
    this.name = name; 
    this.childNodes = []; 
    ... 
    return this 
}; 

나는 동적으로 새로운 노드를 생성하고 그래서 같은 부모 노드의 childNodes에 배열에 추가하는 기능을 가지고 : 난 그냥 정수 값이 아닌 노드를 밀어 코드가 잘 작동하고 예상대로 배열이 성장함에 반대하는 경우

parent_node.childNodes.push(Model().createNode("Node " + getNodeCount()); 

푸시는 항상 길이 항상 0에 대한 후속 호출을 1 반환합니다.
기본적으로 원하는 것은 노드 객체를 동적으로 (예 : Java의 새 Node()처럼) 만들고 해당 객체를 노드 배열에 추가하는 것입니다. 하지만 JS의 객체에 대한 나의 이해가 객체 지향 프로그래밍에 대한 나의 경험에 결함이 있다고 생각합니다.

이 문제를 해결하는 방법에 대한 도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다.

답변

0

난 당신이 뭔가를하려는 생각 :

interFace.createNode = function(name) { 
    debug('createNode'); 
    var node = {}; 
    node.name = name; 
    node.childNodes = []; 
    ... 
    return node; 
}; 

또는이 같은 :

interFace.createNode = function(name) { 
    debug('createNode'); 
    return new interFace.Node(name); 
}; 

interFace.Node = function(name){ 
    this.name = name; 
    this.childNodes = []; 
    ... 
} 
+1

예, 그렇습니다. 사실 제가 원하는 것입니다. 대단히 감사합니다! – Androidicus

+0

괜찮습니다. Javascript 'constructors'는 익숙하지 않은 것으로 악명이 높습니다. –

+0

나는 동의한다 : JS와 같은 것을 사용하는 것이 나쁜가? (JS에 OO 패턴 적용)? – Androidicus

0

같은 프로토 타입과 리터럴로 OOP 원칙 JS 사용의 개체를 만드는 방법은 여러 가지가 있습니다 등등.

당신이 달성하려고하는 질문 및 작업과 관련하여 다음은 정적 자연에서 노드 객체를 채울 수있는 리터럴 래퍼입니다. 이 메소드를 동적으로 호출하여 노드를 작성합니다.

VAR의 nodeHanlder = {

create : function(name){ 
     return { 
     name : name, 
     childNodes : [] 
    } 
} 

};

var node = nodeHanlder.create ("Node 1");

이 속성에 액세스 ... 을 객체를 반환합니다

//node.name; //node.childNodes;