以下のコードを使用して、モジュールパターンでプライベートメンバーフィールドを定義できます
var myClass = function(){
var private_field1,private_field_2;
var private_func1 = function(){
//.......
}
//.........
var myObj = {
global_field1:2,
global_field2:"something",
global_func: function(){//......}
}
return myObj;
};
var obj = myClass();
このメソッドは問題なく機能しますが、この問題の問題は、新しいオブジェクトを作成するたびに、すべての関数のコピーが作成されてメモリにロードされることです(同じクラスのすべてのオブジェクトが同じ関数メモリを共有するJavaとは異なります)
私は以下の他の方法を使おうとしました:
var myClass = (function(){
var private_field1,private_field_2;//private static fields
var private_func1 = function(){
//.......
}
//.........
var Constr = function(){
//do something
}
Constr.prototype = {
//................
global_func: function(){//......}
}
return Constr;
}());
var obj1 = new myClass();
var obj2 = new myClass();
ただし、このメソッドの問題は、明らかにobj1、obj2がプライベートフィールドの同じコピーを共有することです(したがって、事実上、それらは静的です)。では、オブジェクトに同じ関数のコピーを使用しながら、モジュールパターンでプライベートフィールドを定義する方法はありますか?
そして、上記の最初のメソッドを継承するには、最初に子クラス内にオブジェクトを作成してから、そのオブジェクトを返す必要があります。
var ChildClass = function(){
var childobj = myClass();
//override or add functions to childobj
return childobj ;
}
しかし、これは事実上、baseClassのオブジェクトをchildClassでラップしているだけです。これを(1番目または2番目のメソッドに対して)実装して、protected、privateなどのメソッドで真のJava継承のように機能できるようにする他の方法はありますか?