0

私はJSへの道を学んでいます(ただし、プログラミングは初めてではありません)。だから、JSをいじるためだけにLinkedListを実装しようとしています。

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");
4

1 に答える 1

2

thisinthis.countは、LinkedList オブジェクトのインスタンスを参照します。一部:

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

これらはプライベート変数であり、LinkedList オブジェクトのプロパティとは見なされません。

代わりにやりたいことは次のとおりです。

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

これにより、LinkedList オブジェクトのプロパティが作成されhead、できるようになります。tailcountthis.count++

編集:head ,を LinkedList オブジェクトのプライベートとして保持するにはtailcount他のコードは次のようになります。

// 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は、返す代わりに:

 return {
        Add: insert,
    };

これを行う必要があります:

this.Add = insert;
return this;

オブジェクトの作成時に現在のオブジェクト コンテキストが返されるようにします。

于 2013-03-07T05:24:35.383 に答える