简易的jQuery

@(Inbox)

本文会用最简单的形式来模仿jQuery源码。

jQuery看着是什么样子的?

$("li").addClass("redColor");

$(美元符号)是jQuery标志性符号,最开头为选择器

可以分析出jQuery的基本公式为 $('').xxx,也就是名称(选择器选中的元素) + 动作

如何模仿?

$('')显然是一个主语,代表着是谁,从这里便可以推断出这是一个选择器。

首先制作出美元符号:

window.jQuery = function (){
    //TODO 里面还有很多代码需要写
}

window.$ = jQuery

原理很简单,就是创建一个全局对象$而已

接下来便是选择器,而jQuery的选择器有几个特性

  • 返回的是一个伪数组
  • 参数可以传字符串也可以传标签元素
window.jQuery = function (nodeOrSelector){
    //选择元素 变成伪数组
    let nodes = {}
    if(typeof nodeOrSelector === 'string'){
        let tempNodes = document.querySelectorAll(nodeOrSelector)
        for(let i = 0;i < tempNodes.length;i++){
            nodes[i] = tempNodes[i]
        }
        nodes.length = tempNodes.length
    }else if(nodeOrSelector instanceof Node ){
        nodes[0] = nodeOrSelector
        nodes.length = 1
    }
    
    //返回伪数组
    return nodes
}

window.$ = jQuery

最后添加一些和jQuery一样的和你自己想扩展的方法,便OK了。

window.jQuery = function (nodeOrSelector){
    //选择元素 变成伪数组
    let nodes = {}
    ......//省略选择器代码
    //增加类名
    nodes.addClass = function(classes){
      for(let i = 0;i < this.length;i++){
        this[i].classList.add(classes)
      }
    }
    //为内容赋值
    nodes.setText = function(content){
      for(let i = 0;i < this.length;i++){
        this[i].textContent = content
      }
    }
    //返回伪数组
    return nodes
}

window.$ = jQuery

//使用
$("li").addClass("redColor")

总结

自此简易的jQuery就完成了,其实很多看着高大上的三方库,都可以用最简单的方法来模仿实现。

当然,在真正的框架或者库的开发中,需要添加大量防御代码,以及大量的需求兼容,所以最终优秀的类库会变得使用会越来越方便,但源码也越来越难读。
不过我始终相信越是优秀的三方库,其核心原理必定简单明了,其核心结构必定清晰灵活。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,918评论 25 709
  • 今天依然在序章里晃悠 修辞学 -> 修辞(古典修辞学五分科之一) -> 辞格 (技巧,给予新的认识以形式)这本书将...
    农人阅读 942评论 0 0
  • 作者: Pattopia 伴随着宴会厅奏乐响起,舞池中身材曼妙的女子翩翩起舞,步履轻盈,淡定从容,风姿卓约,成功吸...
    Pattopia阅读 3,203评论 0 1
  • 是因为手机电脑不够好玩 还是因为飞机杯震动棒不够好用? 我想大概是因为爱吧。 如果男生不喜欢你,大抵可以和同性在一...
    小莫MoMo阅读 2,823评论 0 0
  • 我看《雄狮》这部电影,说实话的确一部分是冲着它在各个电影节中的68次提名和31项大奖而去,它也曾是《爱乐之城》奥斯...
    遇见小小盼阅读 3,427评论 1 5