美文网首页
zepto与jquery原型链解析

zepto与jquery原型链解析

作者: zxhnext | 来源:发表于2020-08-10 14:40 被阅读0次
<p>zepto test 1</p>
<p>zepto test 2</p>
<p>zepto test 3</p>
<div id="div1">
  <p>zepto test in div</p>
</div>
<!-- <script type="text/javascript" src='./zepto.js'></script> -->
<script type="text/javascript" src='./jquery.js'></script>
<script type="text/javascript">
  var $p = $('p')
  $p.css('font-size', '40px')
  alert($p.html())
  var $div1 = $('#div1')
  $div1.css('color', 'blue')
  alert($div1.html())

  // jquery添加原型
  $.fn.getNodeName= function() {
    alert(this[0].nodeName)
  }
  </script>

1. zepto原型链

(function(window){

  //空对象
  var zepto = {}

  // 这就是构造函数
  function Z(dom, selector) {
    var i,len = dom ? dom.length : 0
    for(i = 0;i < len; i++) {
      this[i] = dom[i]
    }
    this. length = len
    this.selector = selector || ''
  }
  
  zepto.Z = function(dom, selector) {
    // 注意,出现了new关键字
    return new Z(dom, selector)
  }

  zepto.init = function (selector) {
    // 源码中,这里的处理情况比较复杂。但因为本次只是针对原型,因此这里就弱化了
    var slice = Array.prototype.slice
    var dom = slice.call(document.querySelectorAll(selector))
    return zepto.Z(dom, selector)
  }

  //即使用zepto时候的$
  var $ = function(selector){
    return zepto.init(selector)
  }

  window.$ = $

  $.fn = {
    constructor: zepto.Z,
    css: function (key, value) {
      return 'css'
    },
    html: function (value) {
      return 'html'
    }
  }

  zepto.Z.prototype = Z.prototype = $.fn
  
})(window)

2. jquery原型链

(function(window){

  var jQuery = function (selector) {
    //注意new关键字,第一步就找到了构造函数
    return new jQuery.fn.init(selector);
  }

  //初始化jQuery.fn
  jQuery.fn = jQuery.prototype = {
    constructor: jQuery,
    //其他函数...
    css: function (key, value) {
      return "模拟css"
    },
    html: function (value) {
      return "模拟html"
    }
  }

  // 定义构造函数
  var init = jQuery.fn.init = function (selector) {
    var slice = Array.prototype.slice
    var dom = slice.call(document.querySelectorAll(selector))
    var i, len=dom ? dom.length : 0
    for(i = 0; i < len; i++) {
      this[i] = dom[i]
    }
    this.length = len
    this.selector = selector || ''
  }
  
  //定义原型
  init.prototype = jQuery.fn;

  window.$ = jQuery

})(window)

3. 为何要把原型方法放在 $.fn

  1. 只有 $ 会暴露在 window 全局变量
  2. 将插件扩展统一到 $.fn.xxx 这一个接口,方便使用

相关文章

  • zepto与jquery原型链解析

    1. zepto原型链 2. jquery原型链 3. 为何要把原型方法放在 $.fn 只有 $ 会暴露在 win...

  • 前端JS进阶五(原型)

    Zepto中如何使用原型 Zepto使用原型源码分析 jQuery中如何使用原型 jQuery使用原型源码分析 原...

  • jquery和zepto有什么区别?

    1.Zepto中没有原型定义extend方法,但是jquery有 2.Zepto最初是移动端开发的库,是jquer...

  • Day6:JS进阶

    原型 jquery和zepto如何使用原型(难) 异步 线程 为什么JS只能是一个线程? 浏览器需要渲染DOM J...

  • JavaScript 原型链学习

    JavaScript prototype 与 _proto_(原型链解析) prototype 概念 protot...

  • jquery和zepto的扩展方法extend

    jquery和zepto的扩展方法extend 总结下jQuery(3.1.1)和zepto(1.1.6)到底是如...

  • 2017-12-27

    原型和原型链 示例如何准确判断一个变量是数组类型写一个原型链继承的例子描述 new 一个对象的过程zepto(或其...

  • jQuery整体架构

    一、jQuery的架构划分 jQuery无new构建实例 共享原型设计 extend源码解析 二、jQuery无n...

  • 移动web开发

    1. Zepto库和JQ区别 Zepto相对jQuery更加轻量,主要用在移动端,jQuery也有对应的jQuer...

  • 01-Zepto

    初识Zepto Zepto是一个轻量级的针对现代高级浏览器的Javascript库,与jQuery有着类似的api...

网友评论

      本文标题:zepto与jquery原型链解析

      本文链接:https://www.haomeiwen.com/subject/igjiyctx.html