2014-11-11 2 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()); 

нажмите всегда возвращает 1, последующий вызов длины всегда 0. Если я просто вытолкнуть целое значение, а не узел объекта код работает отлично, а массив растет, как и ожидалось.
В принципе, я хочу создать объекты Node динамически (например, новый Node() в Java) и добавить эти объекты в массив узлов. Но я подозреваю, что мое понимание объектов в JS испорчено моим опытом программирования OO.

Любая помощь по решению этой проблемы очень ценится. Спасибо заранее.

ответ

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, как известно, неинтуитивно понятны. –

+0

Я согласен :) Неплохо ли использовать JS так (используя OO-шаблоны для JS)? – Androidicus

0

Есть несколько способов создания объектов использования JS принципов объектно-ориентированного программирования, такие как прототипы и литералы , и т. д.

Что касается вашего вопроса и задачи, которую вы собираетесь достичь, то следующая буквальная оболочка, в которой вы можете заполнить объект узла статическим характером. поскольку вы вызываете этот метод динамически для создания узлов.

вар nodeHanlder = {

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

};

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

это вернет объект ... для доступа к свойствам,

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

Смежные вопросы