我可以使用下面的代码在模块模式中定义私有成员字段
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 中,是否有其他方法可以实现相同的方法(对于第一种或第二种方法),以便它可以像真正的 java 继承一样使用受保护的、私有的等方法?