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

在JavaScript中的下划线前缀只是一个约定,就像例如在Python私有类方法是?

从2.7 Python文档:

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

这是否也适用于JavaScript?

以这个JavaScript代码为例:

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

而且,使用下划线前缀variables。

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

只有约定? 还是有更多的下划线前缀?


我承认我的问题与这个问题非常相似,但是它并没有使JavaScript中的下划线前缀的含义变得更加明智。

这只是一个惯例。 Javascript语言对以下划线字符开头的标识符没有任何特殊的含义。

这就是说,对于不支持封装的语言来说,这是一个非常有用的惯例。 尽pipe没有办法阻止某人滥用类的实现,但至less它确实表明了你的意图,并且把这样的行为logging下来是错误的。

JavaScript实际上支持封装,通过涉及隐藏成员的方法(Crockford)。 也就是说,这有时很麻烦,下划线约定是一个非常好的约定,用于私人事物,但实际上并不需要隐藏。

JSDoc 3允许你使用@access private (以前的@private标签)注释你的函数,这对于向其他开发者广播你的意图也很有用 – http://usejsdoc.org/tags-access.html

“只有约定?还是有更多的下划线前缀?”

除了隐私约定,我还希望帮助人们认识到,下划线前缀也用于依赖于独立参数的参数,特别是在URI锚点映射中。 从属关键总是指向一个地图。

示例(来自https://github.com/mmikowski/urianchor ):

$ .uriAnchor.setAnchor({page:'profile',_page:{uname:'wendy',online:'today'}});

浏览器search字段上的URI定位符更改为:

!#页=简介:UNAME,温迪|在线,今天

这是一个基于散列变化来驱动应用程序状态的惯例。

应该指出的是,有一个名为下划线的JS库。 当使用该库时,_前缀确实有意义。

http://underscorejs.org/

import/export现在正在使用ES6来完成这项工作。 如果我的大多数函数被导出,我还是倾向于用_作为前缀而不是输出函数的前缀。

如果你只导出一个类(比如在angular度项目中),那根本就不需要。