一尘不染

JavaScript中属性和方法名称的下划线前缀

javascript

JavaScript中的下划线前缀仅是约定,例如Python私有类方法中的约定吗?

从2.7 Python文档中:

Python中不存在只能从对象内部访问的“私有”实例变量。但是,大多数Python代码遵循一个约定:以下划线开头的名称(例如_spam)应被视为API的非公开部分(无论是函数,方法还是数据成员)

这也适用于JavaScript吗?

以下面的JavaScript代码为例:

function AltTabPopup() {
    this._init();
}

AltTabPopup.prototype = {
    _init : function() {
        ...
    }
}

另外,使用带下划线的前缀变量。

    ...
    this._currentApp = 0;
    this._currentWindow = -1;
    this._thumbnailTimeoutId = 0;
    this._motionTimeoutId = 0;
    ...

只有约定?还是在下划线前缀后面?



阅读 728

收藏
2020-04-25

共1个答案

一尘不染

欢迎来到2019!

似乎提出了扩展类语法以允许带#前缀的变量为私有的提议。Chrome 74
附带此支持。

_ 前缀变量名按照惯例被认为是私有的,但仍然是公共的。

尽管它与其他编程语言有很大不同,但该语法试图既简洁又直观。

为什么在所有Unicode代码点中选择标记#?

  • @是最初的最爱,但被装饰者采用。TC39曾考虑过更换装饰器和私人国家的信号灯,但委员会决定遵从转译器用户的现有用法。
  • _会导致与现有JavaScript代码的兼容性问题,这很长时间以来一直允许_以标识符或(公共)属性名称开头。

该提案于2017年7月进入第3阶段。自那时以来,对各种替代方案进行了广泛的思考和冗长的讨论。最后,这种思考过程和社区的持续参与导致对该存储库中的提案重新达成共识。基于该共识,有关此提案的实施正在向前推进。

2020-04-25