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

2020/10/10 19:01 · javascript ·  · 0评论

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;
    ...

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


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

欢迎来到2019!

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

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

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

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

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

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

参见https://caniuse.com/#feat=mdn-javascript_classes_private_class_fields

那只是一个约定。Java语言没有对以下划线字符开头的标识符赋予任何特殊含义。

这就是说,它是不支持语言相当有用的约定封装的开箱。尽管没有办法防止某人滥用您的类的实现,但至少它确实阐明了您的意图,并首先记录了此类错误行为

实际上,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'
  }
});

浏览器搜索字段上的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... */ }
本文地址:http://javascript.askforanswer.com/javascriptzhongshuxinghefangfamingchengdexiahuaxianqianzhui.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!