JavaScript プライベートメソッド 質問する

JavaScript プライベートメソッド 質問する

パブリック メソッドを持つ 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_foodメソッドとuse_restroomメソッドによって呼び出すことができるが、クラスのユーザーによって外部から呼び出すことができないプライベート メソッドを作成するにはどうすればよいですか?

言い換えれば、メソッド実装で次のことができるようにしたいのです。

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

しかし、これは機能しないはずです:

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

private_stuffこれら両方が当てはまるようにプライベート メソッドとして定義するにはどうすればよいでしょうか?

もう読んだダグ・クロックフォードの記述何度か試しましたが、「プライベート」メソッドをパブリックメソッドから呼び出したり、「特権」メソッドを外部から呼び出したりすることはできないようです。

ベストアンサー1

可能ですが、プロトタイプの一部にすることができないという欠点があります。

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();
    }
}

おすすめ記事