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.

(責任編輯:黃 健)

主站蜘蛛池模板: a毛片基地免费大全| 欧美中文字幕在线二区| 日韩AV无码免费一二三区| 欧美日韩中文字幕二区三区| 国产在线一二三区| 91精品人妻一区二区| 国内精自视频品线一二区| 国产精品国产主播在线观看| 国产农村精品一级毛片视频| 中文字幕va| 波多野吉衣一区二区三区av| 欧洲高清无码在线| 久久久精品国产SM调教网站| 亚洲人成色在线观看| 欧美日本不卡| 国产精品亚洲专区一区| 99精品高清在线播放| 国产三级a| 日韩欧美国产区| 久久成人国产精品免费软件| 国产丝袜第一页| 日韩国产亚洲一区二区在线观看| 国产成人夜色91| 97久久精品人人做人人爽| 亚洲成aⅴ人在线观看| 国产毛片片精品天天看视频| 色香蕉网站| 亚洲国产中文精品va在线播放 | 亚洲伊人久久精品影院| 国产成人午夜福利免费无码r| аv天堂最新中文在线| 国产青榴视频| 操国产美女| 免费中文字幕在在线不卡| 国产乱人视频免费观看| 亚洲国产中文欧美在线人成大黄瓜| 毛片在线播放网址| 成人日韩视频| 国产美女一级毛片| 国产精品自在在线午夜区app| 亚洲专区一区二区在线观看| 免费一级全黄少妇性色生活片| 欧美日韩一区二区在线免费观看| 大陆精大陆国产国语精品1024| 视频二区国产精品职场同事| 免费看美女自慰的网站| 国产成人在线无码免费视频| 久操线在视频在线观看| 国产99视频在线| 99视频免费观看| 亚洲大学生视频在线播放| 女人天堂av免费| 99re这里只有国产中文精品国产精品 | 国产交换配偶在线视频| 91偷拍一区| 国产欧美在线观看视频| a色毛片免费视频| 午夜电影在线观看国产1区| 久草视频精品| 国产69囗曝护士吞精在线视频| 日韩精品毛片人妻AV不卡| 欧美成人精品在线| 国产精品妖精视频| 国产在线一区二区视频| 国产精品浪潮Av| 乱系列中文字幕在线视频| 国产精品永久在线| 国产精品视频观看裸模| 国产成人综合日韩精品无码首页 | 一级毛片在线播放免费| 久久精品欧美一区二区| 色欲色欲久久综合网| 性欧美精品xxxx| 天天色天天操综合网| 一区二区三区四区日韩| 国产精品久线在线观看| 亚洲九九视频| 欧美a级在线| 国产毛片高清一级国语| 亚洲精品国产成人7777| 国产午夜看片| yy6080理论大片一级久久|