我正在学习JS(但不是编程新手)。所以,我正在尝试实现一个LinkedList,只是为了解决JS。
除了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 :(得分:2)
this
中的this.count
引用LinkedList对象的实例。
部分:
var head = null,
tail = null,
count = 0;
这些是私有变量,不被视为LinkedList对象的属性。
您想要做的是:
this.head = null;
this.tail = null;
this.count = 0;
这将使head
,tail
,count
成为LinkedList对象的属性,以便您可以执行this.count++
。
编辑:要将head
,tail
,count
保密为LinkedList对象,您的其他代码将是这样的:
// 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;
以便在创建对象时返回当前对象上下文。