原型的实际应用和拓展性

2019-04-12  本文已影响0人  风雪之隅_b6f7

以jquery和zepto为例子

1.传入选择器

2.使用$时返回 zepto.init初始化方法

3.通过slice和dom选择器将专为微dom节点并以数组形式存在

4.将得到的数组放入zepto.Z函数内,依次循环数组内的每一项

5.new z得到一个Z的实例(z本身是构造函数)

6.去构造函数内执行,查找节点的长度和节点选择器并以数组的形式列出来

7.在Z的原型上挂一个$.fn函数

8.$.fn本身是一个对象,对象中就有css html要返回的东西

9.页面返回对象选择器的该有样式呈现在浏览器上

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

    <script src="./my-zepto.js"></script>

</head>

<body>

    <p>jquery test1</p>

    <p>jquery test2</p>

    <p>jquery test3</p>

    <div id="div1">

        <p>jquery test in div</p>

    </div>

</body>

<script>

  var $p=$('p');//传入选择器

  $p.css('font-size','40px');

  console.log($p.html())

  var $div=$('#div1');

  $div.css('color','blue');

  console.log($div.html())

</script>

</html>

(function(window){

  var zepto={}

  //5.构造函数Z

  function Z(dom,selector){

        var i,len=dom?dom.length:0;

        for(i=0; i<len;i++){

            this[i]=dom[i]

        }

  }

  //4.zepto下的Z

  zepto.Z=function(dom,selector){

      //实例化Z

      return new Z(dom.selector)

  }

  //3.zepto初始化

  zepto.init=function(selector){

      //以数组形势存在

      var slice=Array.prototype.slice;

      //通过selector查询到若干dom节点

      var dom=slice.call(document.querySelectorAll(selector));

      return zepto.Z(dom,selector)

  }

    //2.全局$

  var $=function(selector){

      return zepto.init(selector)

    }

    //1.挂载全局$

    window.$=$

  //7.$.fn是对象

    $.fn={

        css:function(key,value){

            //返回css在浏览器上该有的样式

            console.log('css')

        },

        html:function(value){

            //返回html在浏览器上该有的样式

            return ('这是一个模拟的html')

        }

    }

    //6.Z原型上挂载$.fn

    Z.prototype=$.fn

})(window)

拓展型

- jquery插件机制   轮播图插件,tab切换插件等

$.fn.getNodeName=function(){

return this[0].nodeName

}

其实就是在$.fn再添加一个属性,这个属性是一个getNodeName的方法,且这个方法包含插件要执行的方法和属性

将这个挂载到$.fn上,然后去挂在到Z.prototype上,实现和jquery共存的插件

好处:只有$暴露在window全局变量,不会暴露多个变量造成全局污染

插件统一在$.fn.xxxx上方便调用

上一篇 下一篇

猜你喜欢

热点阅读