我只是有点困惑,我想知道到底发生了什么。下面是关于Javascript -> https://www.youtube.com/watch?v=BVJv_AiXSGg&t=495s的DS&A教程(51:21部分)。我在这里问它是因为它没有在教程中提到。
以下是Node的课程:
class NodeClass {
constructor(value) {
this.value = value;
this.next = null;
}
}下面是实际链接列表的类:
class LinkedList {
constructor(value) {
const newNode = new NodeClass(value);
this.head = newNode;
this.tail = this.head;
this.length = 1;
}
push(value) {
const newNode = new NodeClass(value);
this.tail.next = newNode;
this.tail = newNode;
this.length++;
return this;
}
}印刷:
let myLinkedList = new LinkedList(7);
myLinkedList.push(4);
console.log(myLinkedList);现在我和我真正困惑的部分是输出
LinkedList {
head: NodeClass { value: 7, next: NodeClass { value: 4, next: null } },
tail: NodeClass { value: 4, next: null },
length: 2
}如您所见,"next“属性有一个对象值,即"{ value: 4,next: null }”,但我不明白的是,我没有执行"this.head.next",但是它工作得很好。
你能帮我理解一下这件事的真相吗?
此外,如果我推送更多的数据,它完全可以像预期的那样工作。谢谢!
发布于 2022-10-29 15:38:54
这是因为在javascript中对象是引用的。这意味着,当您将一个对象赋值给一个变量,然后将它赋值给另一个变量时,它们都将指向同一个对象,这意味着如果您更新一个对象,它也将反映在另一个变量中。
在LinkedList的构造函数中,可以看到this.head和this.tail都分配给同一个对象newNode。因此,当您在push中推送一个新节点时,它会附加到尾部,并且它也会在头中反映,因为头指向根节点,所有其他节点都会作为尾部添加到下面的节点中。
在您的示例中,在push(4)之后,尾部现在指向值为4的节点。您可以执行另一个push,可能是push(42),并看到尾巴将一直指向最后一个节点,所有新节点都将一直附加到以下节点的next中。
您可以了解更多关于pass-by-reference in javascript的信息。
https://stackoverflow.com/questions/74246576
复制相似问题