2015-04-27 3 views
0

Я пытаюсь добавить новый узел в свой массив, который, как я думал, был новым пустым массивом, уже созданным при вызове createList(), поэтому я должен делать что-то неправильно, потому что получаю ошибка в том, что list.nodes не определено.Невозможно добавить элемент в массив

var head = createNode(null); 

var list = createList(); 
list.nodes.push(head); // error is here, undefined array 

function List(){ 

    this.nodes = []; 
    this.addNodeToList = addNodeToList; 

    function addNodeToList(data){ 

    var currentNode = head; 
    var newNode = createNode(data); 

    while(currentNode.getNextNode() != null){ 
     currentNode = currentNode.getNextNode(); 
    } 

    currentNode.nextNode = newNode; 

    return; 
    } 
} 


function createNode(data){ 
    return new Node(data); 
} 

function createList(){ 
    return new List(); 
} 

function Node(data){ 
    this.data = data; 
    this.nextNode = null; 
} 

function createList(){ 
    return new Node(null); 
} 
+0

, где вы выполняете этот скрипт ... –

+5

В вашем коде есть две функции 'createList'. – Lewis

+0

может быть просто 'list.push (head);' как 'List' (не знаю, какой у него объект) не имеет массива с именем' nodes' как его свойство –

ответ

4

Вы определили функцию creatList дважды. Последующее определение не возвращает узлы массива:

function createList(){ 
    return new Node(null); 
} 

удалить его, и вы должны быть хорошо

EDIT: Рассмотрим следующий пример:

var a = 5; 
var a = 6; 
//OR 
var f = function(){ alert(1)} 
var f = function(){ alert(2)} 

Поскольку JS не поддерживает перегрузку функции, объявление функции дважды имеет тот же эффект, что и назначение выше - позже скрывается более раннее

+0

Вы должны объяснить, почему JS выполняет второй 'createList' вместо первого. – Lewis

+0

omg, как я это пропустил. Я думаю, это потому, что это 1 час ночи. – PositiveGuy

+0

Добавлен комментарий к выстрелу –

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