js 继承实现

来源:互联网 发布:wpsh5是什么软件 编辑:程序博客网 时间:2024/05/01 12:54

看过很多的js继承实现,发现这段代码的继承实现是比较好的一种,好像跟extjs的继承机制非常相似,

/** * 扩展函数 * @param target 扩展对象 * @param params 扩展参数 */function extend(target, params) {       if (!target) {              target = {};       }       for (var prop in params) {              target[prop] = params[prop];       }           return target;}
 
/** * 继承函数 * @param SuperClass 父类 * @param overrides 重写方法 */function extendClass(SuperClass, overrides) {       var SubClass = function() {                // 自动调用构造函数              this.initialize.apply(this, arguments);       };             SubClass.prototype = new SuperClass();             extend(SubClass.prototype, overrides);             SubClass.superclass = SuperClass;             return SubClass;}

 使用方法

var Animal = extendClass(Object, {       initialize: function(name){              this.name = name;       },       showName: function(){         alert(this.name);     }}); var Cat = extendClass(Animal, {       initialize: function(name) {                // 调用父类构造函数              Cat.superclass.prototype.initialize.call(this, name);       }}); var BlackCat = extendClass(Cat, {       initialize: function(name, type) {                // 调用父类构造函数              BlackCat.superclass.prototype.initialize.call(this, name);              this.type = type;       },       showType: function() {              alert(this.type);       },       showName: function() {              alert(this.name + ":" + this.type);       }});  var cat = new Cat("cat name");// 继承方法cat.showName(); // truealert(cat instanceof Animal); // truealert(cat instanceof Cat); // falsealert(cat instanceof BlackCat); var blackCat = new BlackCat("123", "black"); // 方法重写blackCat.showName(); // 自有方法blackCat.showType(); // truealert(blackCat instanceof Animal); // truealert(blackCat instanceof Cat); // truealert(blackCat instanceof BlackCat);
0 0