聞きたいこと
JavaScript で接頭辞に _
をつけて区別するという手法があると聞きました。
クラスではない関数群のファイル a.js について、他の b.js などから import
しない関数 (a.js 内のプライベート関数) を区別するのだそうです。
みなさんはこれを実践していらっしゃいますか?
例
JavaScript
1const aFunction1 = () => { 2 _aFunction2(); 3 console.log('aFunction1'); 4}; 5 6const _aFunction2= () => { // 👈 プライベート関数を接頭辞で区別 7 console.log('_aFunction2'); 8}; 9 10export { 11 aFunction1 12}
背景
ChatGPTに聞いたらこういうコードを書いてくれて、便利だと思ったのですが、実際の現場でどうなのかと気になり質問させて頂きました。
ご意見よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答9件
#1
総合スコア752
投稿2025/03/27 03:09
編集2025/03/27 03:11もしかして、 プライベートフィールドの意のやつでしょうか……?(多分その使い方だと undocumented property の意っぽいですが。
その使い方するなら最近だと _
ではなく #
を使った プライベートプロパティという手があります。(ただし、 class の中でのみ有効
プライベートプロパティ - JavaScript | MDN
なお、関数のprefix に _ は使いませんね。私のところでは。
#2
総合スコア117548
投稿2025/03/27 03:12
ちょっと何が目的かよくわかりませんが、privateで参照できない関数をつくりたいなら
クラスで取り込んで、プライベート設定(#)しておけばよいのでは?
//test.js
javascript
1export default class TestClass{ 2 aFunction1 = () => { 3 this.#aFunction2(); 4 console.log('aFunction1'); 5 }; 6 #aFunction2= () => { 7 console.log('#aFunction2'); 8 }; 9}
読み込むhtml
html
1<script type="module" src="test.js"></script> 2<script type="module"> 3import testClass from "./test.js"; 4const newClass=new testClass; 5newClass.aFunction1(); 6</script>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア21380
投稿2025/03/27 06:20
編集2025/03/27 06:25接頭語として
_
を指定する関数
懐かしい!あったあった!って感じですね
今はクラスのプライベートメソッド指定すりゃええやんって話ですけど
JavaScriptには元々クラスなんてないし、ECMAScript2015(以下ES)で実装されたクラスってプロトタイプをあたかもクラスのように振る舞う偽物をごねごねして充てがっただけでは?みたいな話になりますね。
この辺を真面目に議論すると闇が深くなるのでさておき
JavaScriptのプロトタイプには非公開のプロパティみたいな機能は無かったので、
プライベートメソッドはこういう風にする文化が結構浸透していたイメージがあります。
今はESのバージョンも更に進んでクラスっぽくなってきたなーって感じがするので
新機能を使えば良いと思います。
プライベートな変数や関数
JavaScriptには元々importなる機能は無かったですし、
プライベートな変数の接頭語を_
にする文化は無かったはずです。
あるのはjQueryみたいな古のグローバル変数に設定するやり方とか
Node.js以降に出てきたrequireに与えるとか
ES2015のES Modulesの考え方もそうですが
明示した変数や関数しか選んでお外に出せないはずなので、
変数名が衝突するからとか、使われると嫌だからという形で使われる事は無かったはずです。
この辺はChatGPTが時代背景を勘違いして、PHPみたいな他言語と混ぜて解釈している可能性がありますね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#7
総合スコア117548
投稿2025/03/27 06:58
接頭辞に「_」をつけるのは標準に近いくらい流行ってたんですよ
昔やってたjsのカプセル化はこんな感じ
javascript
1const hoge={setA:function(val){this._a=val}}; 2Object.defineProperty(hoge,"a",{ 3 get(){return this._a}, 4}); 5console.log(hoge.a); // undefined 6hoge.a=100; 7console.log(hoge.a); // undefined 8hoge.setA(200); 9console.log(hoge.a); // 200
プロパティを別名をつけておいてゲッタで参照する。(逆に言えば接頭辞「_」でなくてもなんでもよかった)
上記の場合セッタの設定がないのでプロパティに投入しても値は変わらず、専用のセッタ関数を用意している
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。