JavaScript中属性和方法名称的下划线前缀
JavaScript中的下划线前缀是否只是一种约定,比如Python中的私有类方法 从2.7 Python文档中: “私有”实例变量 只能从内部访问 Python中不存在对象。 然而,有一个惯例是 后面是大多数Python代码:名称 以下划线作为前缀(例如。 _垃圾邮件)应被视为API的非公开部分(无论是否 是函数、方法还是数据 成员) 这是否也适用于JavaScript 以下面的JavaScript代码为例:JavaScript中属性和方法名称的下划线前缀,javascript,scope,naming-conventions,Javascript,Scope,Naming Conventions,JavaScript中的下划线前缀是否只是一种约定,比如Python中的私有类方法 从2.7 Python文档中: “私有”实例变量 只能从内部访问 Python中不存在对象。 然而,有一个惯例是 后面是大多数Python代码:名称 以下划线作为前缀(例如。 _垃圾邮件)应被视为API的非公开部分(无论是否 是函数、方法还是数据 成员) 这是否也适用于JavaScript 以下面的JavaScript代码为例: function AltTabPopup() { this._init();
function AltTabPopup() {
this._init();
}
AltTabPopup.prototype = {
_init : function() {
...
}
}
此外,还使用下划线前缀变量
...
this._currentApp = 0;
this._currentWindow = -1;
this._thumbnailTimeoutId = 0;
this._motionTimeoutId = 0;
...
只有惯例?或者下划线前缀后面还有其他内容吗
我承认我的问题与之非常相似,但这并没有让人更清楚JavaScript中下划线前缀的重要性。这只是一个惯例。Javascript语言对以下划线字符开头的标识符没有任何特殊意义
也就是说,对于不支持开箱即用的语言来说,这是一个非常有用的约定。虽然没有办法防止有人滥用您的类的实现,但至少它确实澄清了您的意图,并将此类行为记录为错误。这只是一种惯例。Javascript语言对以下划线字符开头的标识符没有任何特殊意义
也就是说,对于不支持开箱即用的语言来说,这是一个非常有用的约定。尽管没有办法防止有人滥用您的类的实现,但至少它确实澄清了您的意图,并且首先记录了此类行为是错误的。JavaScript实际上通过一种涉及(Crockford)的方法支持封装。这就是说,它有时很麻烦,下划线约定是一个非常好的约定,用于某种私有的东西,但实际上不需要隐藏。JavaScript确实支持封装,通过一种涉及(Crockford)的方法。这就是说,它有时很麻烦,下划线约定是一种非常好的约定,用于某种私有的东西,但实际上不需要隐藏。JSDoc 3允许您使用
@access private
(以前是@private
标记)注释函数这对于向其他开发人员广播您的意图也很有用-JSDoc 3允许您使用@access private
(以前是@private
标记)注释您的函数,这对于向其他开发人员广播您的意图也很有用-
“只有约定?还是下划线前缀后面还有其他约定?”
除了隐私约定之外,我还想帮助大家认识到下划线前缀也用于依赖于独立参数的参数,特别是在URI锚映射中。从属关键点始终指向贴图
示例(来自):
浏览器搜索字段上的URI定位更改为:
\#!page=profile:uname,wendy|online,today
这是一种用于根据哈希更改驱动应用程序状态的约定
“只有约定?还是下划线前缀后面还有其他约定?”
除了隐私约定之外,我还想帮助大家认识到下划线前缀也用于依赖于独立参数的参数,特别是在URI锚映射中。从属关键点始终指向贴图
示例(来自):
浏览器搜索字段上的URI定位更改为:
\#!page=profile:uname,wendy|online,today
这是一种用于根据哈希更改驱动应用程序状态的约定。
import/export
现在正在使用ES6执行此任务。如果我的大多数函数都已导出,我仍然倾向于在未导出的函数前面加上。
如果只导出一个类(如在角度项目中),则根本不需要它
export class MyOpenClass{
open(){
doStuff()
this._privateStuff()
return close();
}
_privateStuff() { /* _ only as a convention */}
}
function close(){ /*... this is really private... */ }
import/export
现在正在使用ES6完成这项工作。如果我的大多数函数都已导出,我仍然倾向于在未导出的函数前面加上。
如果只导出一个类(如在角度项目中),则根本不需要它
export class MyOpenClass{
open(){
doStuff()
this._privateStuff()
return close();
}
_privateStuff() { /* _ only as a convention */}
}
function close(){ /*... this is really private... */ }
欢迎来到2019年
它似乎是一种扩展类语法的方法,以允许#
前缀变量为私有变量。铬74与此支持
\
前缀变量名按惯例被认为是私有的,但仍然是公共的
这种语法力求简洁直观,尽管它与其他编程语言有很大不同
为什么在所有Unicode代码点中选择了sigil
- @最初是最受欢迎的,但被装饰师拿走了。TC39考虑交换装饰器和私有状态标志,但委员会决定推迟transpiler用户的现有使用
- _将导致与现有JavaScript代码的兼容性问题,该代码长期以来一直允许在标识符或(公共)属性名称的开头使用uu
#
前缀变量为私有变量。铬74与此支持
\
前缀变量名按惯例被认为是私有的,但仍然是公共的
这种语法力求简洁直观,尽管它与其他编程语言有很大不同
为什么在所有的t中选择了这个标志