手写jQuery的封装
admin
2024-02-10 17:17:16
0次

jquery封装心得

  • 具有独特的链式语法和短小清晰的多功能接口;
  • 具有高效灵活的CSS选择器,并且可对CSS选择器进行扩展;
  • 拥有便捷的插件扩展机制和丰富的插件
  • jQuery兼容各种主流浏览器

jquery的封装原理

① js的全局代码区只有一个,这样就会造成同名变量的值会被覆盖
② 使用对象封装,将代码封装到对象中,但是如果对象被覆盖,则全部失效,风险极高
③ 使用工厂模式,将代码进行封装
④ 将封装的函数名去除,避免覆盖,但是函数没有办法被调用
⑤ 匿名自调用,可以在页面加载的时候调用一次,但是不能重复调用,并且数据没有办法获取
⑥ 使用闭包,将数据一次性挂载到window对象下

jQuery对象是一个以DOM为对象的特殊数组,并包含大量方法,简单可以理解为:

    function jQuery(){var jquery = [dom1, dom2, dom3];jquery.fn1 = function(){…};jquery.fn2 = function(){…};return jquery;}

jQuery.extend()源码示例

jQuery.extend = jQuery.fn.extend = function() {var options, name, src, copy, copyIsArray, clone,target = arguments[ 0 ] || {},i = 1,length = arguments.length,deep = false;// Handle a deep copy situationif ( typeof target === "boolean" ) {deep = target;// Skip the boolean and the targettarget = arguments[ i ] || {};i++;}// Handle case when target is a string or something (possible in deep copy)if ( typeof target !== "object" && !isFunction( target ) ) {target = {};}// Extend jQuery itself if only one argument is passedif ( i === length ) {target = this;i--;}for ( ; i < length; i++ ) {// Only deal with non-null/undefined valuesif ( ( options = arguments[ i ] ) != null ) {// Extend the base objectfor ( name in options ) {copy = options[ name ];// Prevent Object.prototype pollution// Prevent never-ending loopif ( name === "__proto__" || target === copy ) {continue;}// Recurse if we're merging plain objects or arraysif ( deep && copy && ( jQuery.isPlainObject( copy ) ||( copyIsArray = Array.isArray( copy ) ) ) ) {src = target[ name ];// Ensure proper type for the source valueif ( copyIsArray && !Array.isArray( src ) ) {clone = [];} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {clone = {};} else {clone = src;}copyIsArray = false;// Never move original objects, clone themtarget[ name ] = jQuery.extend( deep, clone, copy );// Don't bring in undefined values} else if ( copy !== undefined ) {target[ name ] = copy;}}}}// Return the modified objectreturn target;
};

jQuery.extend()方法

extend: JQ的继承方法, 为添加后续代码提供良好的扩展性,同时扩展插件也是从该继承该应地中扩展。
jQuery.extend({…}); 扩展一些工具方法(静态方法),如$.trim(), $.proxy()等。


jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。
注意:

    1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
    1. 如果多个对象具有相同的属性,则后者会覆盖前者的属性值。
$.extend( target [, object1 ] [, objectN ] ) 

指示是否深度合并

$.extend( [deep ], target, object1 [, objectN ] ) 

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...