1. ホーム
  2. javascript

[解決済み] JavaScriptのプライベートメソッド

2022-03-19 09:09:14

質問

公開メソッドを持つJavaScriptのクラスを作るには、次のようなことをします。

function Restaurant() {}

Restaurant.prototype.buy_food = function(){
   // something here
}

Restaurant.prototype.use_restroom = function(){
   // something here
}

そうすれば、私のクラスのユーザーは

var restaurant = new Restaurant();
restaurant.buy_food();
restaurant.use_restroom();

が呼び出せるプライベートメソッドを作成するには、どうすればよいでしょうか。 buy_fooduse_restroom メソッドを呼び出すことができますが、クラスのユーザーが外部から呼び出すことはできません。

つまり、メソッドの実装ができるようにしたいのです。

Restaurant.prototype.use_restroom = function() {
   this.private_stuff();
}

しかし、これではうまくいかないはずです。

var r = new Restaurant();
r.private_stuff();

を定義するにはどうすればよいのでしょうか? private_stuff をプライベートメソッドとして使用することで、これらの両方が正しく機能するようになりますか?

を読みました。 Doug Crockfordの記事 を何度か試してみましたが、private"メソッドをpublicメソッドから呼び出したり、"privileged"メソッドを外部から呼び出すことはできないようですね。

どのように解決するのですか?

できますが、プロトタイプの一部にはできないのが難点です。

function Restaurant() {
    var myPrivateVar;

    var private_stuff = function() {  // Only visible inside Restaurant()
        myPrivateVar = "I can set this here!";
    }

    this.use_restroom = function() {  // use_restroom is visible to all
        private_stuff();
    }

    this.buy_food = function() {   // buy_food is visible to all
        private_stuff();
    }
}