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);