首页 > 解决方案 > ES6 类 getter 或 setter 中属性名称前的下划线 (_) 有什么作用?

问题描述

我的类的原始版本(没有下划线)出现最大堆栈大小错误,当我查看它时,我最终看到了一些示例,其中包括在 getter/setter 中引用类属性时添加下划线;在对推荐的任何其他内容过于花哨之前,我只是添加了下划线并运行了程序,仅此一项就解决了问题。这是如何运作的?在这种情况下,下划线在做什么?据我了解,它可以防止堆栈在递归无限循环中一遍又一遍地调用setter,但是添加下划线是如何实现的呢?

作为参考,我在 Node.js 应用程序中使用 ES6 语法。

原来的:

    set serialNumber(serialNumber) {
        this.serialNumber = serialNumber;
    }

更正:

    set serialNumber(serialNumber) {
        this._serialNumber = serialNumber;
    }

标签: javascriptes6-class

解决方案


它没有特殊含义,但它使属性名称与众不同。

setterset serialNumber处理设置serialNumber属性的调用。如果您尝试在 setter 中设置相同的属性,那么 setter 会递归调用自身并且永远不会终止。

这是命名用于在类中使用的“私有”数据属性的许多约定之一,但它对 JS 运行时没有特别的意义。


推荐阅读