p()
最初の 2 つの例を考えると、コンストラクターとして呼び出すと仮定します。
しかし、最初の例は...
- から作成された各オブジェクトに対して、新しい同一の関数を作成します
new p()
p()
[その関数] は、コンストラクター内のローカル変数とパラメーターにアクセスできます
// p.prototype = {}
new p(); // { do:function(){alert('cool')}; } ------^
new p(); // { do:function(){alert('cool')}; } ------^
new p(); // { do:function(){alert('cool')}; } ------^
そして2番目の例...
- から作成されたすべてのオブジェクト間で、プロトタイプに配置された関数を共有します
new p()
- [その関数] コンストラクターのプライベート変数/パラメーターにアクセスできません
//p.prototype = {do:function(){alert('cool')};}
new p(); // {} ------^
new p(); // {} ------^
new p(); // {} ------^
3 番目の例は機能しません。JavaScript では関数はオブジェクトなので、そのオブジェクトに新しいプロパティを配置するだけです。その関数の呼び出しには影響しません。