【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81055973 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81055973

 

/*
* @Author: 我爱科技论坛
* @Time: 20180715
* @Desc: 实现一个类似于JQuery功能的框架
* V 1.0: 实现了基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架的搭建
* V 2.0:实现了框架的进一步优化,具有良好的扩展性, 可以支持链式访问
* */

 

/ 主框架: 只做一件事,就是用于获取所有的元素集合
(function (w) {
    // 定义一个Xframe对象,后面就是他的构造函数
    var xframe = function (selector, context) {
        // 为了使得后面的函数this始终指向的是xframe框架,这里需要修改函数内部this的指向
        return this.init.apply(this, [selector, context]);
    };

    // 定义一个初始化函数,用于初始化获取所有的元素集合
    // 只要用户使用了类似于JQuery中的选择元素的方法,就开始选择一个元素集合
    // 这里的核心功能:实际上是为了使用一个伪数组实现一个类似于JQuery中的链式访问的功能
    xframe.prototype.init = function (selector, context) {
        // 开始构建一个伪数组:{1 : list[0], 2 : list[1], , , , length : list.length}
        this.length = 0;
        if (typeof  selector === 'string'){
            var nodeList = (context || document).querySelectorAll(selector);
            this.length = nodeList.length;
            for (var i = 0, len = this.length; i < len; i++){
                this[i] = nodeList[i];
            }
        } else if (selector.nodeType){
            // 如果获取的是一个元素节点,文本节点,或者属性节点的话
            this[0] = selector;
            this.length++;
        }

        // 为了可以支持链式访问必须把这个this对象返回出去
        return this;
    };


    // 使用双对象法则继续暴露出去一个对象,进行对象的二次封装
    // 【双对象法则的使用】
    var $$ = function (selctor, context) {
        // 这里使用一个简单的异步加载机制,等待所有的DOM元素执行完毕之后再开始继续向下执行
        if (typeof selctor === 'function'){
            // selector就是DOM元素加载完毕之后的继续向下执行的回调函数
            w.onload = selctor;
        } else {
            // 如果不是一个函数的话
            return new xframe(selecor, context);
        }
    }

    // 添加一个extend方法, 用于扩充一个对象的方法, 扩展向一个类中拷贝方法
    $$.extend = function () {
        // 这里需要分为两种情况:
        // 1. 如果传过来的是一个参数的话,就相当于是给xframe对象添加方法
        // 2. 如果是两个参数的话,就相当于是给一个类扩充方法
        var len = arguments.length,
            target = null,              // target 用来存储需要把方法拷贝进去的目标函数
            i = 1,                      // 初始化变量i, 表示需要开始遍历的起始位置标记
            key;                        // 为了防止定义太多的局部变量,可以把后面需要用到的所有局部变量事先在前面定义好
        if (len === 0){
            return;
        } else if (len === 1){
            // 给xrame对象添加方法
            target = xframe.prototype;
            i--;
        } else{
            // 两个参数的话,那么第一个参数就是我需要拷贝新的方法进去的目标对象
            // 如果是两个参数的话:就不需要修改变量i的值了, 直接从第一个位置开始,拿到第一个参数后, 把第二个参数的方法全部拷贝给第一个对象
            // 注意: 这里有可能也是三个参数或者是多个参数, 因此也可以吧后面的好几个对象的属性或者方法添加给第一个对象
            target = arguments[0];
        }


        // 确定好了target 这个目标对象以后,开始遍历原始对象那个source,把source里面的方法全部都拷贝到这个target对象里面
        for (; i < len; i++){
            // 这里实际上在遍历一个json对象,json对象的每一项实际上就是一个属性或者方法
            for (key in source){
                target[key] = arguments[i][key];
            }
        }
        return target;
    }


    // 为了把主框架里面的局部变量暴露出去供其他模块使用
    w.xframe = w.$ = $$;

})(window);



// 公共框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    /*公共部分*/
    xframe.extend(xframe, {

    });
    /*字符串处理模块*/
    xframe.extend(xframe, {

    });
    /*数组相关*/
    xframe.extend(xframe, {

    });
    /*Math*/
    xframe.extend(xframe, {

    });
    /*数据类型检验*/
    xframe.extend(xframe, {

    });
})(xframe);



// 事件框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {

    });
})(xframe);


// 属性框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {

    });
})(xframe);



// 内容框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {

    });
})(xframe);


// DOM框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {

    });
})(xframe);



// 缓存框架
(function (xframe) {
    // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)
    xframe.extend({
        each : function () {

        }
    });

    // 不需要参与链式访问的
    xframe.extend(xframe, {

    });
})(xframe);




















// 基础框架: 基本上都是不需要参与链式访问的
// 实现功能: 如果是一个参数的话,就直接给类添加方法
// 如果是多个参数的话,就表示给指定的对象添加方法
xframe.extend(xframe, {
    ltrim: function () {

    },
    rtrim: function () {

    },
    trim: function () {

    },
    ajax: function () {

    },
    formateString: function () {

    },
    random: function () {

    },
    isNumber: function () {

    },
    isBoolean: function () {

    },
    isString: function () {

    },
    isUndefined: function () {

    },
    isObject: function () {

    },
    isNull: function () {

    },
    isArray: function () {

    },

})


// 选择框架
/***
 * 如果下面的框架需要用到上面的框架,就直接可以把上面的去全局变量/对象暴露出去,这里是使用了前面的xframe全局变量
 */
(function ($$) {
    $$.$all = function () {

    };
    $$.$id = function (id) {

    };
    $$.$tag = function () {

    };
    $$.$class = function () {

    };
    $$.$group = function () {

    };
    $$.cengci = function () {

    };
    $$.$select = function () {

    }

})(xframe);


// 事件框架
(function ($$) {
    $$.on = function () {

    }
})(xframe);


// CSS框架
(function ($$) {
    $$.css = function () {

    };

    // 元素的显示与隐藏
    $$.show = function () {

    };
    $$.hide = function () {

    };

    // 元素的宽度和高度
    $$.width = function () {

    };
    $$.height = function () {

    };


    // 元素的滚动宽度和高度
    $$.scrollWidth = function () {

    };
    $$.scrollHeight = function () {

    };

    // 滚动条相对于上面和左边的距离
    $$.scrollTop = function () {

    };
    $$.scrollLeft = function () {

    };


    // 屏幕的宽度和高度
    $$.screenWidth = function () {

    };
    $$.screenHeight = function () {

    };


    // 文档区域的宽度和高度
    $$.wWidth = function () {

    };
    $$.wHeight = function () {

    };


    // 获取文档滚动窗口的相关属性参数信息
    $$.wScrollHeight = function () {

    };
    $$.wScrollWidth = function () {

    };

    // 获取文档滚动窗口距离上面和左边的距离和宽度
    $$.wScrollTop = function () {

    };
    $$.wScrollLeft = function () {

    };
})(xframe);


// 属性框架
(function ($$) {
    // 私有方法
    function removeName() {

    };

    function addName() {

    }

    // 公有方法
    $$.attr = function () {

    };
    $$.addClass = function () {

    };
    $$.removeClass = function () {

    }
})(xframe);


// 内容框架
(function () {
    $$.html = function () {

    };
    $$.text = function () {

    };
    $$.val = function () {

    }
})();


// 动画框架
(function () {
    function Animate() {

    }

    Animate.prototype = {}
})();

 

 

 

 

相关文章
|
5月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
396 6
|
11月前
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
7月前
|
人工智能 自然语言处理 JavaScript
Github又一AI黑科技项目,打造全栈架构,只需一个统一框架?
Motia 是一款现代化后端框架,融合 API 接口、后台任务、事件系统与 AI Agent,支持 JavaScript、TypeScript、Python 多语言协同开发。它提供可视化 Workbench、自动观测追踪、零配置部署等功能,帮助开发者高效构建事件驱动的工作流,显著降低部署与运维成本,提升 AI 项目落地效率。
645 0
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
2488 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
10月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
395 9
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
523 0
|
监控 安全 Cloud Native
企业网络架构安全持续增强框架
企业网络架构安全评估与防护体系构建需采用分层防御、动态适应、主动治理的方法。通过系统化的实施框架,涵盖分层安全架构(核心、基础、边界、终端、治理层)和动态安全能力集成(持续监控、自动化响应、自适应防护)。关键步骤包括系统性风险评估、零信任网络重构、纵深防御技术选型及云原生安全集成。最终形成韧性安全架构,实现从被动防御到主动免疫的转变,确保安全投入与业务创新的平衡。
|
人工智能 自然语言处理 并行计算
MeteoRA:多任务AI框架革新!动态切换+MoE架构,推理效率提升200%
MeteoRA 是南京大学推出的多任务嵌入框架,基于 LoRA 和 MoE 架构,支持动态任务切换与高效推理。
662 3
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
490 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架