为什么我可以在另一个单独的类中使用一个类中定义的方法?

这里我有两个类,Node 类和 LinkedList 类。我想知道为什么我可以在 LinkedList 类中使用 Node 类中的方法。

例如,在 LinkedList 类中的 .addToTail() 方法中,我对初始化为“this.head”的尾部变量使用了 .setNextNode() 和 .getNextNode() 方法。由于“this.head”不是Node类的实例,所以它应该无法使用Node类中的方法,对吧......?还是我遗漏了什么?

class Node {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
    getNextNode() {
        return this.next;
    }
    setNextNode(node) {
        if (node instanceof Node || node === null) {
            this.next = node;
        } else {
            throw new Error('Error!');
        }
    }
}

class LinkedList {
    constructor() {
        this.head = null;
    }
    addToHead(data) {
        let newHead = new Node(data);
        let currentHead = this.head;
        this.head = newHead;
        if (currentHead) {
            this.head.setNextNode(currentHead);
        }
    }
    addToTail(data) {
        let tail = this.head;
        if (!tail) {
          this.head = new Node(data);
        } else {
          while(tail.getNextNode()) {
            tail = tail.getNextNode()
          }
          tail.setNextNode(new Node(data));
        }
      }
}
yourthing 回答:为什么我可以在另一个单独的类中使用一个类中定义的方法?

您可以使用它们,因为您有一个分配给 head 的 Node 实例。您尚未添加任何可能对这些函数的使用设置限制的访问修饰符(例如私有)。

,

newHead 是 Node 的一个实例。将 this.head 设置为 newHead 意味着 this.head 现在也是 Node 的一个实例。您可以通过使用“instanceof”检查 this.head 来查看这一点。

addToHead(data) {
   let newHead = newNode(data);
   let currentHead = this.head;
   this.head = newHead;
   console.log(this.head instanceof Node); // returns true
   . . .
}
本文链接:https://www.f2er.com/56656.html

大家都在问