私はいくつかの例を試していましたが、プロトタイプに関数を追加したい場合、コンストラクタのプライベートメンバーにアクセスすることができないという問題がありました。私はthis解決策を見つけました。これはいいハックだと思われる。コンストラクタ関数内のプロトタイプへのプロパティの追加
私はいくつかの他の方法を試して、私は次のようだ:我々はコンストラクタ関数内のプロトタイプに追加しているので
var Restaurant = function()
{
var myPrivateVar;
var private_stuff = function() // Only visible inside Restaurant()
{
return "I can set this here!";
}
Restaurant.prototype.use_restroom = function() // use_restroom is visible to all
{
private_stuff();
}
Restaurant.prototype.buy_food = function() // buy_food is visible to all
{
return private_stuff();
}
}
var restaurant = new Restaurant();
restaurant.buy_food(); // this would work
restaurant.private_stuff(); // this won't
ソリューションは奇妙なようです。 (私はこれをほとんど見ていない)。これは少なくともfirefox 5とchromeで動作します。何か問題がありますか?
ですばらしい説明とコメントをくれたことで、それを修正しました。オブジェクトを作成するたびに、プロトタイプのメソッドを再定義しているという点は全く分かりませんでした。以前はモジュラーパターンを見ていました。しかし、私が直面していた問題は、私が 'restaurantMaker'を呼び出すたびに、' use_restroom'と 'buy_food'の新しいインスタンスを取得するということでした。これは必要ではない。すなわち、プロトタイプに追加することができれば共有されている可能性がある。 –
問題は、関数がプライベート変数と同じスコープで定義されている場合にのみ、関数がプライベート変数にアクセスできることです。したがって、関数を一度しか定義していない場合、関数はすべて同じプライベート変数を共有するか、アクセスできません。あなたがレストランのオブジェクトの100sを持っているならば、それは本当に問題です。 – Skilldrick