js抽象类和抽象方法

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

 

posted @ 2014-03-28 16:14  青椒炒蛋  阅读(6408)  评论(0编辑  收藏  举报