999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Javascript原型的Zepto框架設計

2018-05-15 18:10:01王運倪靜
軟件導刊 2018年4期

王運 倪靜

摘 要:隨著互聯網的普及,前端技術也得到了迅速發展。為了深入了解前端開發中的框架設計原理,以Zepto前端框架為例,利用Javascript原型鏈的相關知識,采用原生Javascript與框架對比的方法剖析了框架整體設計思路,細致分析了框架的大致架構,重構了Zepto對象原型,并封裝了可能用到的所有方法。利用這種從宏觀到微觀的研究視角,最終呈現了一個框架的整體細致構造及其與底層原生Javascript的聯系,以便于開發者熟悉框架設計原理,更好地設計出自己的框架。

關鍵詞:Javascript;前端框架;原型;Zepto

DOI:10.11907/rjdk.172716

中圖分類號:TP319

文獻標識碼:A 文章編號:1672-7800(2018)004-0124-03

Abstract:In order to gain a better understanding of the framework design principles in front-end development, we take the front-end framework of Zepto as an example, use Javascript prototype chain, native Javascript and frame comparison method to analyze the framework of the overall design ideas. We have detailed analysis of the framework of the general structure, reconstruct Zepto object prototype, and encapsulate all the methods that will be used. Based on the micro-to-micro perspective, we present a framework of the overall structure and its relationship with the underlying native Javascript, which help developers familiarize framework design principles to better establish their frameworks.

Key Words:Javascript; front frame; prototype; Zepto

0 引言

近幾年隨著前端領域的迅速發展,出現了多種類型的框架[1],目前市場上的主流框架(庫)有jQuery、Vue、React與Angular等。但這幾種框架的代碼量太大,架構體系也比較繁瑣,所以本文選取一種成熟且經典的框架,即Zepto進行分析[2]。該框架雖然出現時間較早,但作為設計框架的例子進行分析是十分適合的。首先,其架構與當前熱門的jQuery很相似;其次,其代碼量簡短,可方便進行更透徹的分析。而框架的所有內容都是對底層知識的封裝,采用原生Javascript與其對比的方法進行分析,可起到事半功倍的效果[3]。

1 Zepto簡介

Zepto在5年前是一款十分熱門的框架,其應用領域在于移動端,與jQuery框架十分相似。Zepto框架大量參考了jQuery的API,簡化了對部分瀏覽器的兼容,例如IE。因此,可以說它是為移動端量身打造的[4],但其核心模塊只有不到一千行的代碼,相對于jQuery一萬多行的代碼量,其無論是分析還是編寫都方便許多。同時,它也是眾多前端開發者分析框架對象的首選。

2 Javascript原型

在原生Javascript的知識體系中,上下文環境、作用域、原型鏈、同步與單線程是重點,也是難點。在介紹Zepto設計原理前,先對Javascript原型進行分析,這也是Zepto的設計基礎。每創建一個新函數,都會根據一組特定規則為該函數創建一個prototype屬性,該屬性指向函數的原型對象。在默認情況下,所有原型對象都會自動獲得一個constructor(構造函數)屬性,該屬性包含一個指向prototype屬性所在函數的指針[10]。

圖1展示了Person構造函數、Person原型屬性以及Person現有兩個實例間的關系。在此,Person.prototype指向原型對象,而Person.prototype.constructor又指向Person。原型對象中除包含constructor屬性外,還包括后來添加的屬性。Person的每個實例,如person1和person2都包含一個內部屬性,該屬性僅指向Person.prototype。也即是說,它們與構造函數沒有直接關系[5]。因此,可以在構造函數的原型對象中定義公共的屬性或方法,例如圖1中的name、age、job和sayName,這些方法與屬性是任何一個通過構造函數產生的實例所能共享的。此外,在每個實例中,還可以添加額外的屬性與方法,這時添加的屬性與方法是每個實例單獨享有的[11]。

3 Zepto設計原理

先分析一個簡單的html頁面,代碼如下:

var MYMp = MYM(‘p); //MYMp是數組

var MYMspan = MYM(‘span); //MYMspan是數組

通過API可以知道MYMp.addClass是一個函數,這是一般數組不具備的,在控制臺輸出MYMp instanceof Array為false,也驗證了MYMp不是一個常規數組的實例。與通常遇到的不同,正如原型里提到的,通過函數new輸出的內容,都會有個指針指向該函數的原型對象,而將原型對象重構后,即可獲得大量所需的方法。Zepto正是采用該方式對原型對象進行了改造。因此,每一個看似數組的內容可以同時具備數組與非數組的方法。這也是Zepto的核心設計理念,即重定義原型對象內容[6]。

4 Zepto源碼分析

Zepto框架主要架構如下:

varZepto = (function(){

var MYM, zepto = { }

//省略N行代碼

function Z(dom, selector){

vari, len=dom?dom.length : 0

for(i=0; i

}

對于zepto.Z函數,代碼如下所示:

function Z(dom, selector){

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

for(i=0; i

this[i] = dom[i]

this.length = len

this.selector = selector || ‘

}

}

zepto.Z = function(dom, selector){

return new Z(dom, selector)

}

MYM.fn = {

//…多種屬性

}

zepto.Z.prototype = Z.prototype = MYM.fn

這里對構造函數Z進行了實例化,Z函數與之前提到的原型密切相關,將原型函數進行重構,會獲得許多自定義的屬性與方法。MYM.fn函數是Z函數原型的出處,里面封裝了一系列原生Javascript的內容,將其與原生Javascript對比可發現,slice、each等方法都可以在原生方法中找到對應部分,同時考慮到兼容問題,整個原型對象即可完整呈現。至此,整個Zepto框架組合完畢,詳細的屬性方法可在API文檔中查看。

5 結語

縱觀互聯網浪潮中的前端領域,其發展十分迅速,各種組件庫、框架應運而生,因此前端也變得越來越復雜。但這一切變化都是建立在Html+CSS+Javascript上,而這些底層技術的變化相對緩慢[8]。本文分析了框架的設計原理與設計架構,將其中的封裝方法與原生Javascript方法進行對比,并闡述了此類框架設計的核心要點[9]。當然,在分析過程中也存在一些不足,如沒有將封裝方法與原生方法進行一一比對,框架代碼未能全部展現出來等,將在后續工作中進一步改進。

參考文獻:

[1] 王悅.基于Extjs4的Web前端框架設計與應用[D].青島:中國海洋大學,2015.

[2] 王保平.對JavaScript框架的再思考[J].程序員,2008(11):24.

[3] 樊紅珍.JavaScript框架jQuery和ExtJS的對比研究[J].現代計算機月刊,2011(1):23-24.

[4] 李紅.主流Javascript框架比較與分析[J].鞍山師范學院學報,2015(4):40-47.

[5] 司徒正美.JavaScript框架設計[M].北京:人民郵電出版社,2014.

[6] 歐查德,LM. JavaScript框架高級編程:應用Prototype、YUI、Ext JS、Dojo、MooTools[M].北京:清華大學出版社,2011.

[7] 栗新雨.兩款jQuery前端框架(DWZ和MiniUI)之比較[J].計算機光盤軟件與應用,2013(20):276.

[8] 姜艷.一種基于JavaScript框架的混合應用開發技術[J].網絡新媒體技術,2016,5(4):59-64.

[9] 代慶梅.淺析JavaScript MVC框架在Web開發中的應用[J].電腦知識與技術:學術交流,2014(4):2242-2245.

[10] 彭敦陸,杜雪鋒.基于Web服務的組件集成技術在客戶關系管理中的應用[J].上海理工大學學報,2004,26(1):71-75.

[11] 蔣偉良,徐福緣.ADO方案與胖客戶環境下的交互HTML數據庫設計[J].上海理工大學學報,1999(2):184-187.

[12] JENSEN S H, MLLER A, THIEMANN P. Type analysis for JavaScript[J]. Lecture Notes in Computer Science, 2009,5673:238-255.

[13] GUHA A, SAFTOIU C, KRISHNAMURTHI S. The essence of JavaScript[J]. Lecture Notes in Computer Science, 2015,6183:126-150.

(責任編輯:黃 健)

主站蜘蛛池模板: 久草青青在线视频| 夜夜操狠狠操| 国产玖玖视频| 免费日韩在线视频| 久久91精品牛牛| 日本一区中文字幕最新在线| 动漫精品中文字幕无码| 亚洲视频二| 成人国产精品2021| 欧美黄色网站在线看| 国产精品对白刺激| 日韩高清欧美| 婷婷成人综合| 强乱中文字幕在线播放不卡| 久青草免费视频| 91小视频在线| 99热国产在线精品99| 午夜啪啪网| 99无码熟妇丰满人妻啪啪| 国产亚洲精久久久久久久91| 狠狠色噜噜狠狠狠狠奇米777| 欧美日韩免费在线视频| 免费在线一区| 欧洲日本亚洲中文字幕| 国产91在线免费视频| 特级做a爰片毛片免费69| 日本三级欧美三级| 日本久久网站| 72种姿势欧美久久久久大黄蕉| 国产精品亚洲综合久久小说| 欧美69视频在线| 又粗又硬又大又爽免费视频播放| 日韩av无码精品专区| 国产精品吹潮在线观看中文| 日本久久免费| 亚洲日本精品一区二区| 国产成人综合网在线观看| 日韩精品无码不卡无码| 欧美一区二区三区国产精品| 成人福利在线免费观看| 日本欧美成人免费| 免费毛片a| 国产精鲁鲁网在线视频| 91探花在线观看国产最新| 欧美一级99在线观看国产| 欧美日韩免费| 综合社区亚洲熟妇p| 亚洲第一黄片大全| 日韩福利在线观看| 中文字幕人妻av一区二区| 亚洲无码视频喷水| 97se亚洲综合在线| 久久久亚洲色| 亚洲色图在线观看| 国产又粗又猛又爽视频| 一区二区三区四区在线| 亚洲一级毛片免费观看| 91无码人妻精品一区| 9999在线视频| 高清码无在线看| 韩国福利一区| 2020精品极品国产色在线观看| 在线不卡免费视频| 91精品综合| 99热这里只有精品5| 久久亚洲国产一区二区| 99re在线视频观看| 999精品在线视频| 国产一级α片| 婷婷午夜天| 97亚洲色综久久精品| 色婷婷丁香| 亚洲高清免费在线观看| 91小视频在线观看免费版高清| 中文字幕无码av专区久久| 久久91精品牛牛| 国产精品一区在线观看你懂的| 2022国产91精品久久久久久| 国产乱人乱偷精品视频a人人澡| 午夜精品久久久久久久99热下载 | 全免费a级毛片免费看不卡| 激情综合网激情综合|