2013-03-07 5 views
0

JS 로의 길을 배우고 있지만 (프로그래밍에 처음이 아닙니다). 그래서 JS로 놀기 위해 LinkedList를 구현하려고합니다.변수 항상 NaN

count이 항상 NaN을 반환하는 것을 제외하고는 정상적으로 작동합니다. 내가 봤 거든, 그 이유는 내가 처음에 숫자로 count을 설정 아니었다 고 생각했지만, 그랬어.

function LinkedList() { 
    var head = null, 
     tail = null, 
     count = 0; 

    var insert = function add(data) 
    { 
     // Create the new node 
     var node = { 
       data: data, 
       next: null 
     }; 

     // Check if list is empty 
     if(this.head == null) 
     { 
      this.head = node; 
      this.tail = node; 
      node.next = null; 
     } 
     // If node is not empty 
     else 
     { 
      var current = this.tail; 
      current.next = node; 
      this.tail = node; 
      node.next = null; 
     } 

     this.count++; 
    }; 

    return { 
     Add: insert, 
    }; 
} 

var list = new LinkedList(); 
list.Add("A"); 
list.Add("B"); 
+0

어떻게'count'가'NaN'입니까? –

+0

당신의 카운트를 글로벌하게 만드십시오, 그러면 작동하길 바랍니다. – EnterJQ

+0

당신은 head, tail, count라는 3 개의 private 변수를 만들었습니다. 하지만'add'에서'this'를 사용하여 public 변수로 참조하려고 시도합니다. –

답변

2

this.countthis는 LinkedList의 객체의 인스턴스를 참조 :

다음은 내 코드입니다. 부분 :

var head = null, 
    tail = null, 
    count = 0; 

이 개인 변수와 LinkedList의 객체의 속성으로 간주되지.

this.head = null; 
this.tail = null; 
this.count = 0; 

그리고 당신은 this.count++을 할 수 있도록 즉, LinkedList의 객체의 head, tail, count 속성을 만들 것입니다 :

은 당신이 대신하고 싶은 것입니다.

편집 :head에서, LinkedList의 객체에 비공개로 tail, count가, 다른 코드는 다음과 같은 것이 계속하려면 :

// Check if list is empty 
    if(head == null) 
    { 
     head = node; 
     tail = node; 
     node.next = null; 
    } 
    // If node is not empty 
    else 
    { 
     var current = tail; 
     current.next = node; 
     tail = node; 
     node.next = null; 
    } 

    count++; 

이 또한 염두에 두어야 객체가 통과 부산물 참조. 그 적용 그래서 :

var current = tail; 
current.next = node; 
tail = node; 
node.next = null; 

더 : 당신은 count이 반환하는 대신 다음, 공공 재산을하고 싶다면 :

this.Add = insert; 
return this; 
:

return { 
     Add: insert, 
    }; 

당신은이 작업을 수행해야

개체 생성시 현재 개체 컨텍스트가 반환되도록합니다.

+0

변수가 내부적으로 만 액세스되는 경우 개체를 private로 유지하고 개체 속성으로 유지하지 않는 것이 좋습니다. –

+0

공개적으로 액세스 할 수 있도록하려는 경우에는 가정하지 않습니다. 그 사람까지. 그러나 당신 말이 맞습니다. – sweetamylase

+0

내부 (개인) 액세스 권한을 선호합니다.귀하의 방법을 사용하기 위해 코드를 변경하려고했지만 문제가 남아 있습니다. 나는 여전히 NaN을 얻는다. 왜 머리 꼬리에 액세스 할 수 있습니까? –