コンストラクター内で関数を として定義するとthis.myFunction=...
、それはインスタンスに固有になります。これは、すべてのインスタンスに対して構築してメモリに保持する必要があることを意味しますが、これは重くなる可能性があります。また、継承することもできません。
これを行う唯一の正当な理由は次のとおりです。
- 特定の値を囲む
- 他のタイプの特定の関数 (毎回異なる関数を作成する可能性があります)
ほとんどの場合、実際に必要なのはプロトタイプで定義された関数です。
オブジェクトのMDNから:
JavaScript のすべてのオブジェクトは Object の子孫です。すべてのオブジェクトは Object.prototype からメソッドとプロパティを継承しますが、オーバーライドされる場合があります。たとえば、他のコンストラクターのプロトタイプはコンストラクター プロパティをオーバーライドし、独自の toString メソッドを提供します。Object プロトタイプ オブジェクトへの変更は、それらの変更の対象となるプロパティとメソッドがプロトタイプ チェーンに沿ってさらにオーバーライドされない限り、すべてのオブジェクトに反映されます。
追加の質問について:次のコードは、直接アクセスできない関数を構築します:
Class = function () {
var imprivate = function(){...};
this.doSomething = function() { uses imprivate};
}
欠点は、 のインスタンスごとに異なる関数インスタンスがあることですClass
。これは、ほとんどの場合、モジュール(インスタンスが 1 つしかないモジュール) に対して行われます。個人的には、コメントで ThiefMaster が提案したとおりに行うことを好みます。プライベート関数の前に を付け_
ます。
// private method
XBasedGrapher.prototype._ensureInit = function() {