关于JavaScript链表实现Stack中pop()访问this.top.next的疑问
关于链表实现栈中pop方法访问
this.top.next的疑问解答 在JavaScript里,你能通过Stack类的top属性访问this.top.next,核心原因很简单:你代码里的Node类的next属性是公开的实例属性,JavaScript默认不对这类属性做访问限制。
具体拆解:
- 常见的Node类实现都是这样的:
class Node { constructor(value) { this.value = value; this.next = null; // 这里的next是挂载在实例this上的公开属性 } }
这种写法下,next和value一样,都是Node实例的公开属性——任何持有这个Node实例引用的对象(比如Stack的top属性,它指向栈顶的Node实例),都能直接访问next。
- 只有当你用ES6的私有字段语法(前缀加
#)定义next时,外部才无法访问:
class Node { #next; // 私有字段,外部不可访问 constructor(value) { this.value = value; this.#next = null; } }
如果你的Node类是这种写法,那this.top.#next都会报错,更别说this.top.next了。但显然你的代码里没用到私有字段,所以next是公开可访问的。
简单来说:Stack的top指向一个Node实例,而这个实例的next是公开属性,所以直接访问完全合法,这是JavaScript类属性的默认行为。
内容的提问来源于stack exchange,提问作者Sahaj Singh
相关产品推荐
相关产品推荐

