成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

JQuery源碼 1 / 整體結(jié)構(gòu)

warkiz / 3574人閱讀

摘要:本文分析的版本內(nèi)部實(shí)現(xiàn)原理,版本已經(jīng)去除了大量的對(duì)于舊版本瀏覽器的兼容性的處理,但是還是有部分源碼是對(duì)不常見(jiàn)的或者老版本的瀏覽器進(jìn)行處理,在看到這部分的時(shí)候如果感興趣可以看一下,也可以直接跳過(guò),個(gè)人一直認(rèn)為學(xué)習(xí)舊版本瀏覽器的兼容是最沒(méi)有收益

本文分析的JQuery2.0.3版本內(nèi)部實(shí)現(xiàn)原理,2.0.3版本已經(jīng)去除了大量的對(duì)于舊版本瀏覽器的兼容性的處理,但是還是有部分源碼是對(duì)不常見(jiàn)的或者老版本的ie瀏覽器進(jìn)行處理,在看到這部分的時(shí)候如果感興趣可以看一下,也可以直接跳過(guò),個(gè)人一直認(rèn)為學(xué)習(xí)舊版本瀏覽器的兼容是最沒(méi)有收益的,不要在必然要被淘汰技術(shù)上浪費(fèi)太多時(shí)間

JQuery整體結(jié)構(gòu)

(function(window,undefined){
  //代碼
}(window))

JQuery最外層使用的匿名函數(shù)自執(zhí)行結(jié)構(gòu),為了最大程度避免代碼污染,防止沖突

傳入?yún)?shù)window的主要目的有兩點(diǎn)

在尾端傳入的參數(shù)是實(shí)參,表明在函數(shù)執(zhí)行時(shí)第一個(gè)參數(shù)是window,這樣就避免了在內(nèi)部使用window時(shí)再次去外層查找,在js中window屬于最頂層的變量,而根據(jù)js原型鏈的查找原則,函數(shù)會(huì)優(yōu)先查找本身的變量,在查找不到的情況下逐步向上查找,所以如果在window沒(méi)有作為參數(shù)傳入到函數(shù)內(nèi)部的情況下,會(huì)從底層一直查找到最頂層,浪費(fèi)大量性能,在形參中傳入第二個(gè)參數(shù)undefined,主要是考慮到在低版本瀏覽器中undefined的值是可以改變的

//IE7
undefined=10;
console.log(undefined); //10

在代碼中我們可能會(huì)需要判斷變量值===undefined的情況,為了避免我們獲取的undefined的值是被改變過(guò)的值,我們?cè)谛螀⒅袀魅胍粋€(gè)參數(shù),由于在實(shí)參中沒(méi)有傳入對(duì)應(yīng)的值,那么這個(gè)值本身就是undefined,所以我們?cè)谑褂胾ndefined時(shí)就可以直接使用該值,而不用擔(dān)心是否在操作改變過(guò)的undefined

為壓縮代碼做考慮,如果window不是參數(shù)而只是一個(gè)變量,那么window字段將無(wú)法被壓縮,但如果只是作為形參的情況下可以被壓縮為單字符,實(shí)際上我們看壓縮后的代碼。window被壓縮成了e

JQuery返回的是一個(gè)對(duì)象,JQuery采用的是面向?qū)ο蟮膶?xiě)法,在我們平常使用面向?qū)ο蟮膶?xiě)法大概如下

function A(){}
A.prototype.init=function(){ }

var a=new A();
a.init();

而在使用JQuery時(shí)我們不需要new $()的形式來(lái)調(diào)用是因?yàn)镴Query采用了工廠模式,使我們可以采用無(wú)"new"的形式來(lái)創(chuàng)建對(duì)象,大概寫(xiě)法如下

function JQuery(){
  return new Jquery.fn.init();
}

這樣的好處在于

我們直接執(zhí)行了init的初始化方法

直接返回一個(gè)JQuery的對(duì)象,用戶不需要調(diào)用new JQuery( )后再來(lái)調(diào)用JQuery的方法

但我們會(huì)發(fā)現(xiàn)在JQuery中返回的是JQuery原型上的init方法,但是JQuery中的其他方法是寫(xiě)在JQuery的prototype上的,那么是如何在init上調(diào)用其它方法的呢,主要是通過(guò)下面代碼

//96行
JQuery.fn=JQuery.prototype={
  constructor:JQuery,
  //...
}
//指定JQuery的fn就是JQuery的原型對(duì)象

//283行
JQuery.fn.init.prototype=JQuery.fn;

JQuery通過(guò)將init的原型賦值為JQuery的原型,所以通過(guò)new JQuery.fn.init()出的對(duì)象可以直接使用JQuery原型上的方法

在8826行將JQuery對(duì)象掛載到window下

window.JQuery=window.$=JQuery;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107990.html

相關(guān)文章

  • jQuery源碼分析-整體架構(gòu)(轉(zhuǎn))

    摘要:文章出處拜讀一個(gè)開(kāi)源框架,最想學(xué)到的就是設(shè)計(jì)的思想和實(shí)現(xiàn)的技巧。利用下的簡(jiǎn)單工廠模式,來(lái)將所有對(duì)于同一個(gè)對(duì)象的操作指定同一個(gè)實(shí)例。所以的中提供了以上中擴(kuò)展函數(shù)。 文章出處 http://www.cnblogs.com/aaronjs/p/3278578.html 拜讀一個(gè)開(kāi)源框架,最想學(xué)到的就是設(shè)計(jì)的思想和實(shí)現(xiàn)的技巧。 廢話不多說(shuō),jquery這么多年了分析都寫(xiě)爛了,老早以前就拜讀過(guò),...

    voidking 評(píng)論0 收藏0
  • jQuery3.3.1源碼閱讀(一)

    摘要:入口結(jié)構(gòu)具體代碼抽離結(jié)構(gòu)如下涉及到的知識(shí)解析函數(shù)時(shí)的規(guī)則函數(shù)定義和函數(shù)表達(dá)式閉包解析函數(shù)的規(guī)則解析器會(huì)在遇到時(shí)將其認(rèn)為是函數(shù)定義而非函數(shù)表達(dá)式函數(shù)定義和函數(shù)表達(dá)式函數(shù)定義函數(shù)表達(dá)式閉包閉包函數(shù)中的函數(shù),本質(zhì)是指作用域內(nèi)的作用域閉包舉例綜合以 1.入口結(jié)構(gòu) ( function( global, factory ) { use strict; if ( t...

    王晗 評(píng)論0 收藏0
  • 淺析jQuery整體框架與實(shí)現(xiàn)(上)

    摘要:通常的做法是,為它們指定回調(diào)函數(shù)。請(qǐng)求返回請(qǐng)求返回請(qǐng)求返回異步隊(duì)列解耦異步任務(wù)和回調(diào)函數(shù)為模塊隊(duì)列模塊事件提供基礎(chǔ)功能。 前言 jQuery整體框架甚是復(fù)雜,也不易讀懂,這幾日一直在研究這個(gè)笨重而強(qiáng)大的框架。jQuery的總體架構(gòu)可以分為:入口模塊、底層模塊和功能模塊。這里,我們以jquery-1.7.1為例進(jìn)行分析。 jquery的總體架構(gòu) 16 (function( window,...

    VEIGHTZ 評(píng)論0 收藏0
  • 學(xué)習(xí) underscore 源碼整體架構(gòu),打造屬于自己的函數(shù)式編程類(lèi)庫(kù)

    摘要:譯立即執(zhí)行函數(shù)表達(dá)式處理支持瀏覽器環(huán)境微信小程序。學(xué)習(xí)整體架構(gòu),利于打造屬于自己的函數(shù)式編程類(lèi)庫(kù)。下一篇文章可能是學(xué)習(xí)的源碼整體架構(gòu)。也可以加微信,注明來(lái)源,拉您進(jìn)前端視野交流群。 前言 上一篇文章寫(xiě)了jQuery整體架構(gòu),學(xué)習(xí) jQuery 源碼整體架構(gòu),打造屬于自己的 js 類(lèi)庫(kù) 雖然看過(guò)挺多underscore.js分析類(lèi)的文章,但總感覺(jué)少點(diǎn)什么。這也許就是紙上得來(lái)終覺(jué)淺,絕知此...

    junnplus 評(píng)論0 收藏0
  • 學(xué)習(xí) jQuery 源碼整體架構(gòu),打造屬于自己的 js 類(lèi)庫(kù)

    摘要:匿名函數(shù)將代碼包裹在里面,防止與其他代碼沖突和污染全局環(huán)境。學(xué)習(xí)整體架構(gòu),打造屬于自己的函數(shù)式編程類(lèi)庫(kù)讀者發(fā)現(xiàn)有不妥或可改善之處,歡迎評(píng)論指出。 雖然現(xiàn)在基本不怎么使用jQuery了,但jQuery流行10多年的JS庫(kù),還是有必要學(xué)習(xí)它的源碼的。也可以學(xué)著打造屬于自己的js類(lèi)庫(kù),求職面試時(shí)可以增色不少。 本文章學(xué)習(xí)的是v3.4.1 版本。unpkg.com源碼地址:https://un...

    Gilbertat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<