js中模拟抽象类:在父类中调用一个未定义的方法,这个方法在子类中必须被实现。
1, 模拟类的工厂模式
//基类 var Class = { //基类的静态方法 creat:function(){ //返回一个constructor return function(){ //调用未定义的initialize, //将constructor的arguments传递给initialize this.initialize.apply(this,arguments); } } }; var class1 = Class.creat(); class1.prototype = { initialize:function(str){ alert(str); } }; var obj = new class1(‘hello‘);
2, 在父类中调用一个未定义的方法(或者定义了的空方法),这个方法在子类才被实现。
Object.extend = function(des,source){ for(p in source){ des[p] = source[p]; } return des; }; Object.prototype.extend = function(object){ return Object.extend.apply(this,[this,object]); }; function BaseClass(){}; BaseClass.prototype = { initialize:function(name,age){ this.name = name; this.age = age;//调用了一个抽象方法 this.oninit(); }, //抽象方法是一个空方法,由派生类实现 oninit:function(){} }; function ClassA(){}; ClassA.prototype = (new BaseClass()).extend({ oninit:function(){ alert(this.name + ‘ : ‘ + this.age); } }); var obj = new ClassA(); obj.initialize(‘Tom‘,22);