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;
...
只有 Session ?或者下划线前缀后面还有更多?
我承认我的问题与this question非常相似,但它并没有让人更聪明地了解JavaScript中下划线前缀的重要性 .
6 回答
那只是一个惯例 . Javascript语言对以下划线字符开头的标识符没有任何特殊含义 .
也就是说,'s quite a useful convention for a language that doesn' t支持encapsulation开箱即用 . 虽然没有办法阻止某人滥用你的类的实现,但至少它确实澄清了你的意图,并且首先将这种行为记录为错误 .
JavaScript实际上通过涉及hiding members in closures(Crockford)的方法支持封装 . 那就是说,它实际上需要隐藏起来 .
JSDoc 3允许您使用
@access private
(以前的@private
标记)注释您的函数,这对于向其他开发人员广播您的意图也很有用 - http://usejsdoc.org/tags-access.html除了隐私约定之外,我还想帮助意识到下划线前缀也用于依赖于独立参数的参数,特别是在URI锚图中 . 从属键始终指向 Map .
示例(来自https://github.com/mmikowski/urianchor):
$ .uriAnchor.setAnchor({page:'profile',_ page:{uname:'wendy',online:'today'}});
浏览器搜索字段中的URI锚点更改为:
!#页=简介:UNAME,温迪|在线,今天
这是用于基于散列更改来驱动应用程序状态的约定 .
import/export
现在正在使用ES6完成工作 . 如果我的大部分功能都被导出,我仍然倾向于使用_
前缀不导出的函数 .如果只导出一个类(如在角项目中),则根本不需要它 .
应该指出的是,有一个名为下划线的JS库 . 使用该库时,_前缀确实具有重要性 .
http://underscorejs.org/