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库。 当使用该库时,_前缀确实有意义。
import/export
现在正在使用ES6来完成这项工作。 如果我的大多数函数被导出,我还是倾向于用_
作为前缀而不是输出函数的前缀。
如果你只导出一个类(比如在angular度项目中),那根本就不需要。