【JavaScript】创建命名空间,Class,LOG

JxUnderscore(function (J, _, root) {


    var isWindow,
        deepObject,
        Namespace,
        Class,
        LOG;


    /**
     * 一个对象是否为window对象
     * @param obj
     * @returns {boolean}
     */
    isWindow = function (obj) {
        return !!obj && obj.window === window;
    };

    /**
     * 用于打印日志的方法
     */
    LOG = (function () {
        if (isWindow(root)) {
            if (!!window.console) {
                return {
                    error: function (s) {
                        window.console.log("[error]" + s);
                    },
                    debug: function () {
                        window.console.log("[debug]" + s);
                    }
                };
            } else {
                return {
                    error: function (s) {
                        window.alert(s)
                    },
                    debug: function () {
                    }
                }
            }
        } else {
            return {
                error: function () {
                },
                debug: function () {
                }
            };
        }
    })();

    /**
     * 创建/获取一个命名空间/包
     * @param namespacePath
     * @param context
     * @returns {*}
     */
    deepObject = function (namespacePath, context) {
        if ("string" !== typeof namespacePath) {
            return undefined;
        }
        var ns = context || root;
        var pathArr = namespacePath.split('.');
        for (var i = 0; i < pathArr.length; i++) {
            var path = pathArr[i];
            ns[path] = ns[path] || {};
            ns = ns[path];
        }
        return ns;
    };


    /**
     * 创建Class类的类
     * Class
     * @class
     * @memberOf Jx
     * @param {Object} option = {extend: superClass} 在option对象的extend属性中指定要继承的对象,可以不写
     * @param {Object} object 扩展的对象
     * @return {Object} Class类
     *
     * @example
     *
     *     var Person = new J.Class({
     *      init : function(name){
     *          this.name = name;
     *          alert("init");
     *      },
     *      showName : function(){
     *          alert(this.name);
     *
     *      }
     *
     *
     *
     *  // 继承Person
     *     var Person2 = new J.Class({extend : Person}, {
     *      init : function(name){
     *          this.name = name;
     *          alert("init");
     *      },
     *      showName : function(){
     *          alert(this.name);
     *
     *      }
     *
     *  });
     *
     * };
     *
     */
    Class = function () {
        var length = arguments.length;
        var option = arguments[length - 1];

        option.init = option.init || function () {
        };

        // 如果参数中有要继承的父类
        if (length === 2) {
            /**
             * @ignore
             */
            var superClass = arguments[0].extend;

            /**
             * @ignore
             */
            var tempClass = function () {
            };
            tempClass.prototype = superClass.prototype;

            /**
             * @ignore
             */
            var subClass = function () {
                this.init.apply(this, arguments);
            };

            // 加一个对父类原型引用的静态属性
            subClass.superClass = superClass.prototype;
            //subClass.superClass = superClass;
            /**
             * @ignore
             */
            subClass.callSuper = function (context, func) {
                var slice = Array.prototype.slice;
                var a = slice.call(arguments, 2);
                var func = subClass.superClass[func];
                //var func = subClass.superClass.prototype[func];
                if (func) {
                    func.apply(context, a.concat(slice.call(arguments)));
                }
            };

            // 指定原型
            subClass.prototype = new tempClass();

            // 重新指定构造函数
            subClass.prototype.constructor = subClass;

            _.extend(subClass.prototype, option);

            /**
             * @ignore
             */
            subClass.prototype.init = function () {
                // 调用父类的构造函数
                // subClass.superClass.init.apply(this, arguments);
                // 调用此类自身的构造函数
                option.init.apply(this, arguments);
            };

            return subClass;

            // 如果参数中没有父类,则单纯构建一个类
        } else if (length === 1) {
            /**
             * @ignore
             */
            var newClass = function () {
                // 加了return,否则init返回的对象不生效
                return this.init.apply(this, arguments);
            };
            newClass.prototype = option;
            return newClass;
        }


    };


    /**
     *  创建/获取一个命名空间/包
     * @param {String} namespacePath
     * @param {function} workspace
     * @constructor
     * @example
     *  J.Namespace("jx.ui.pm",function(pm){
     *     return {
     *         a:"a",
     *         b:"b"
     *      }
     *   });
     *  J.Package("jx.ui.pm",function(pm){
     *      var a=pm.a;
     *      return {
     *         c:"c"+a,
     *         d:"d"
     *      };
     *   });
     */
    Namespace = function (namespacePath, workspace) {
        namespacePath = namespacePath || "";
        workspace = workspace || function () {
        };
        var namespaceObj = deepObject(namespacePath);
        if (namespaceObj) {
            var result = workspace(namespaceObj);
            if (_.isObject(result)) {
                _.extend(namespaceObj, result);
            } else {
                LOG.error("the return value is not an object,namespace :" + namespacePath);
            }
        }
    };



    J.Namespace = Namespace;

    J.Package = Namespace;

    J.Class = Class;

    J.isWindow = isWindow;

    J.createDeepObject = deepObject;

    J.LOG = LOG;


    return {
        Namespace: Namespace,
        Package: Namespace,
        Class: Class,
        isWindow: isWindow,
        createDeepObject: deepObject,
        LOG: LOG
    };

});

  

转载于:https://www.cnblogs.com/lhp2012/p/4809440.html

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值