js 继承实现
看过很多的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);?