jQuery源码探究之路(1)--一个最先

  1. 本身近来在进修一些js的插件的写法,那末固然就绕不开jquery,因而本身就进修中碰到的一些题目做些总结和纪录

  1. 本身也是在进修过程当中,有题目请列位指出,愿望大伙能多多支撑,给给star,点点赞呗,github地点

jquery也许是如何的

险些一切的js插件都一样,起首肯定是建立一个闭包,也就是自挪用的匿名函数

(function(){
  //林林总总的代码
})()

在js中,这模样我们就建立了一个特别的函数作用域,在这个域中的代码不会和已有同名要领,变量发生争执。
我们看看一开始JQ要怎样写,在一步步诠释

(function(window,document){
  var Ye = function(selector){
    return new Ye.prototype.init(selector);
  }
  Ye.prototype = {
    constructor : Ye,
    init:function(selector){
      //一些代码
    },
    //许多的原型属性和要领
  }
  Ye.prototype.init.prototype = Ye.prototype;
  //许多的静态属性和要领
  Ye.test = function(){
    console.log('可以运用');
  }
  window.y = Ye;
})(window,document)

这着实就是jq的也许组织了,不过由于jq着实太大,会分许多个模块,然后把上面这个组织模块也包含在一个自挪用匿名函数中。

为何要这么写

起首

var Ye = function(selector){
  return new Ye.prototype.init(selector);
}

这个是一个很奇妙的要领,经由过程返回一个原型上init()实例来到达在运用中无需用new来挪用,然后

Ye.prototype = {
  constructor: Ye,
  length:0,
  init:function(selector){
    //代码
  },
  html:function(v){
  //一些代码
  }
}
Ye.prototype.init.prototype = Ye.prototype;

我们将一些属性和要领写在Ye的prototype中,再用Ye.prototype去掩盖Ye.prototype.init的原型对象,如许我们就可以运用内里的属性和要领了,接下来的重点就在于去组织Ye.prototype了。
在表面

Ye.test = function(){
  console.log("可以运用");
}

我们可以写一些静态的要领,如许无需组织一个Ye对象也可以运用,比方y.test();
末了我们经由过程window.y = Ye来将接口暴露出来,如许在全局就可以运用y来组织Ye对象或是运用属性要领。

接下来我们就只须要想办法在Ye.prototype完成JQ的林林总总的功用了,是否是很轻易。

附:既然看完了,贫苦列位客长老爷点个赞,给个star呗,源码地点:https://github.com/LY55027575…
    原文作者:不只是个看客
    原文地址: https://segmentfault.com/a/1190000008537856
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞