一个自定义的javascript类系统

代码如下:

(function(w){

var $ = w.$ = w.$||{};

var F = function (){};

$.base = function (o){
   F.prototype = o;
   return new F();
};

//这个就是蝴蝶书中的Object.beget

 

//

$.def = function(p,base){

    var s = p

    if(base instanseOf Function)

        s = $.base(base.prototype)

    else if(base instanseOf Object)

        s = $.base(base)

    if(s != p){

        for(var v in p)

            s[v] = p[v]

    }

    var f = function(){

        var t = this

        if(t === window || t === null){

            t = $.base(s)

        }

        return p.init.apply(t,arguments)

    };

    f.fn = f.prototype = s

    f.fn.constructor = f

    return f

};

})(window);

介 绍:

1.$.base(o)返回以o为原型的对象。

2.$.def(p,base)定义一个“类”(实际是返回一个 函数),p为其原型(必须有init方法作为构造函数),base为“父类”(可为构造函数或普通对象)。

3.实例化类似于Jquery,不需要 new。
4.完全兼容原生系统,“类”可以作为普通的构造函数,用new实例化,也可以用call,apply调用。
5.prototype 有fn的别名,和Jquery一样。
6.自动设定constructor。

你可能感兴趣的:(JavaScript,jquery,F#,prototype)