1. ホーム
  2. ジャバスクリプト

[解決済み】プロパティ名やメソッド名のアンダースコア接頭辞は単なる慣例?

2022-04-03 13:39:52

質問

JavaScriptのアンダースコアのプレフィックスは、例えばPythonのプライベートクラスのメソッドのように、単なる慣習なのでしょうか?

Python 2.7 のドキュメントより。

「プライベート」インスタンス変数で 内部からでないとアクセスできない オブジェクトはPythonには存在しません。 しかし、以下のような慣例があります。 ほとんどのPythonのコードでは、名前 の前にアンダースコアをつけたもの(例. など) は、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年、ようこそ!

が表示されます。 提案 を可能にするために、クラス構文を拡張する。 # という接頭辞付きの変数をプライベート変数にすることが承認されました。クローム 74 船舶 に対応しました。

_ 接頭辞付きの変数名は、慣習上プライベートとみなされますが、パブリックであることに変わりはありません。

この構文は、他のプログラミング言語とはかなり異なりますが、簡潔かつ直感的であることを心がけています。

数あるユニコードコードポイントの中で、なぜ#という記号が選ばれたのでしょうか?

  • は当初のお気に入りだったが、デコレーターに取られてしまった。TC39では、デコレーターとプライベートステートのシグルを交換することも検討されましたが、委員会はトランスパイラーユーザーの既存の使い方に委ねることにしました。
  • は、既存のJavaScriptコードとの互換性の問題を引き起こし、長い間、識別子や(パブリック)プロパティ名の先頭に_をつけることを許してきました。

本提案は2017年7月にステージ3に到達しました。そのときから、さまざまな代替案について幅広く考え、長い間議論してきました。 最終的に、この思考プロセスと継続的なコミュニティの関与により、このリポジトリにある提案について新たなコンセンサスが得られました。そのコンセンサスに基づいて、この提案に関する実装が進められています。

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