博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mass Framework class模块v12
阅读量:6088 次
发布时间:2019-06-20

本文共 4603 字,大约阅读时间需要 15 分钟。

最近为类工厂升级,为它添加了许多时麾的功能,如方法链,extend子类生产器。

//=========================================// 类工厂模块 v12 by 司徒正美//==========================================define("class", ["lang"], function($) {    function bridge() {    }    var fnTest = /mass/.test(function() {        mass;    }) ? /\b_super|_superApply\b/ : /.*/;    var hash = {        inherit: function(parent, init) {            //继承一个父类,并将它放进_init列表中,并添加setOptions原型方法            if (typeof parent == "function") {                for (var i in parent) { //继承类成员                    this[i] = parent[i];                }                bridge.prototype = parent.prototype;                this.prototype = new bridge; //继承原型成员                this._super = parent; //指定父类                if (!this.__init__) {                    this.__init__ = [parent]                }            }            this.__init__ = (this.__init__ || []).concat();            if (init) {                this.__init__.push(init);            }            this.toString = function() {                return(init || bridge) + "";            }            var proto = this.fn = this.prototype;            proto.extend = hash.extend;            proto.setOptions = function() {                var first = arguments[0];                if (typeof first === "string") {                    first = this[first] || (this[first] = {});                    [].splice.call(arguments, 0, 1, first);                } else {                    [].unshift.call(arguments, this);                }                $.Object.merge.apply(null, arguments);                return this;            }            return proto.constructor = this;        },        extend: function(module) {            //添加一组原型方法            var target = this;            Object.keys(module).forEach(function(name) {                var fn = target[name], fn2 = module[name]                if (typeof fn === "funciton" && typeof fn2 === "function" && fnTest.test(fn2)) {                    var __super = function() { //创建方法链                        return fn.apply(this, arguments);                    };                    var __superApply = function(args) {                        return fn.apply(this, args);                    };                    target[name] = function() {                        var t1 = this._super;                        var t2 = this._superApply;                        this._super = __super;                        this._superApply = __superApply;                        var ret = fn2.apply(this, arguments);                        this._super = t1;                        this._superApply = t2;                        return ret;                    };                } else {                    target[name] = fn2;                }            });            return this;        }    };    function getSubClass(obj) {        return  $.factory(this, obj);    }    $.factory = function(parent, obj) {        if (arguments.length === 1) {            obj = parent;            parent = null;        }        var statics = obj.statics;//静态成员扩展包        var init = obj.init; //构造器        delete obj.init;        delete obj.statics;        var klass = function() {            for (var i = 0, init; init = klass.__init__[i++]; ) {                init.apply(this, arguments);            }        };        hash.inherit.call(klass, parent, init);//继承了父类原型成员与类成员        var fn = klass.fn;        var __init__ = klass.__init__;        $.mix(klass, statics);//添加类成员        klass.prototype = klass.fn = fn;        klass.__init__ = __init__;        klass.fn.extend(obj);        klass.mix = $.mix;        klass.extend = getSubClass;        return klass;    };    $.mix($.factory, hash);    return $});

例子:

require("class", function($) {                var Animal = $.factory({                    init: function(name) {                        this.name = name                    },                    getName: function() {                        return this.name;                    },                    setName: function(name) {                        this.name = name;                    }                });                var a = new Animal("zzz");                var Dog = $.factory(Animal, {                    init: function(name, age) {                        this.age = age;                    },                    getAge: function() {                        return this.age;                    },                    setAge: function(age) {                        this.age = age;                    }                });                var dog = new Dog("dog", 222);                console.log(dog);            })

转载地址:http://wspwa.baihongyu.com/

你可能感兴趣的文章
samba案例配置及自动挂载
查看>>
nagios主配置文件nagios.cfg详解
查看>>
细说多线程(七) —— 并行编程与PLINQ
查看>>
Unit 06 实际接触工作
查看>>
python执行系统命令的方法
查看>>
Docker基础概念与框架
查看>>
linux基础之帮助文档---常用的命令
查看>>
算法学习之路|POJ2689(素数筛)
查看>>
linux内核监控与配置
查看>>
loadrunner安装运行一步一步来(多图)
查看>>
注册类型转换器
查看>>
自定义的泛型类和泛型约束
查看>>
Cacti进阶应用篇
查看>>
cacti的简单讲解1
查看>>
LVS基本概念杂记
查看>>
自动化运维工具ansible源码安装方法
查看>>
String
查看>>
03-3 BGP专有命令--联盟
查看>>
ExtJS4.2学习(二)Ext统一组件模型
查看>>
Linux系统管理命令--lsof
查看>>