function baseClass(){// 父类 仿照实现了私有 和 公有 及 静态 方法
var self = this;
(function init(){//初始化 函数
self.data1 = "data1";
self.data2 = "data2";
})();
var interFun1 = function(){return "interFun1:" + self.data1;}; // 私有 方法
self.fun1 = function(){console.log("fun1 " + interFun1());}; // 公有 方法
self.fun2 = function(p){self.data2 = p; console.log("self.data2 " + self.data2);};
baseClass.prototype.static1 = function(){console.log("static1");};//静态 方法
}
function subClass(){
var self = this;
(function init(){
self.data1 = "subdata1";
self.data3 = "data3";
})();
self.subFun1 = function(){ console.log("subFun1: self.data3:" + self.data3);};
self.fun2 = function(p){ self.data2 = p + " new data2"; };
subClass.prototype.static1 = function(){console.log("overwrite static1");};
}
subClass.prototype = new baseClass();
subClass.prototype.constructor = subClass;//由于上面的那行,会导致consturctor为baseClass,所以这里在恢复过来,这样,subClass的实例对象的constructor就是取默认的处理,也就是实例对象的constructor == subClass.prototype.constructor, 这样,我们可以统一的判断一个类型对象是属于哪个具体类型(见下一篇文章)
var sub1 = new subClass();
var sub2 = new subClass();
sub1.subFun1();
sub1.fun1();
sub1.fun2("sub1");
sub2.fun2("sub2");
console.log(sub1.data2 + ":" + sub2.data2); // 将输出 'sub1 new data2:sub2 new data2', 说明方法覆盖成功,并且对象之间方法的执行 是互不干涉的
sub1.static1();
console.log("+++++++++++++++++++++++++++++++++++++");
var self = this;
(function init(){//初始化 函数
self.data1 = "data1";
self.data2 = "data2";
})();
var interFun1 = function(){return "interFun1:" + self.data1;}; // 私有 方法
self.fun1 = function(){console.log("fun1 " + interFun1());}; // 公有 方法
self.fun2 = function(p){self.data2 = p; console.log("self.data2 " + self.data2);};
baseClass.prototype.static1 = function(){console.log("static1");};//静态 方法
}
function subClass(){
var self = this;
(function init(){
self.data1 = "subdata1";
self.data3 = "data3";
})();
self.subFun1 = function(){ console.log("subFun1: self.data3:" + self.data3);};
self.fun2 = function(p){ self.data2 = p + " new data2"; };
subClass.prototype.static1 = function(){console.log("overwrite static1");};
}
subClass.prototype = new baseClass();
subClass.prototype.constructor = subClass;//由于上面的那行,会导致consturctor为baseClass,所以这里在恢复过来,这样,subClass的实例对象的constructor就是取默认的处理,也就是实例对象的constructor == subClass.prototype.constructor, 这样,我们可以统一的判断一个类型对象是属于哪个具体类型(见下一篇文章)
var sub1 = new subClass();
var sub2 = new subClass();
sub1.subFun1();
sub1.fun1();
sub1.fun2("sub1");
sub2.fun2("sub2");
console.log(sub1.data2 + ":" + sub2.data2); // 将输出 'sub1 new data2:sub2 new data2', 说明方法覆盖成功,并且对象之间方法的执行 是互不干涉的
sub1.static1();
console.log("+++++++++++++++++++++++++++++++++++++");