简版的jQuery实现过程

2020-08-10  本文已影响0人  凉城十月

封装一个函数

function getSiblings(node){
  let nodes = node.parentNode.children;
  let arr = {}
  let length=0
  for(let i=0;i<nodes.length;i++){
      if(nodes[i] !== node){
        arr[length] = nodes[i]
        length +=1
      }
  }
  return arr
}

再封装一个

function addClass(node, classes){
 for(let key in classes){
   if(classes[key]){
     $(node).addClass(key)
   }
 }
}

命名空间

var dom = {}
dom.getSiblings(node)
dom.addClass(node, {a: true, b: false})

思考:能不能把 node 放在前面?
比如:
node.getSiblings()
node.addClass()

方法一:扩展 Node 接口

直接在 Node.prototype 上加函数

这个方法不太好,容易不小心改变prototype上面的函数。

方法二:新的接口 BetterNode

     function Node2(node){
         return {
             element: node,
             getSiblings: function(){

             },
             addClass: function(){

             }
         }
     }
     let node =document.getElementById('x')
     let node2 = Node2(node)
     node2.getSiblings()
     node2.addClass()

第二种叫做「无侵入」。
把 Node2 改个名字吧

function jQuery(node){
    return {
        element: node,
        getSiblings: function(){

        },
        addClass: function(){
    
        }
    }
}
let node =document.getElementById('x')
let node2 =jQuery(node)
node2.getSiblings()
node2.addClass()
上一篇下一篇

猜你喜欢

热点阅读