成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

輕量級前端MVVM框架avalon:整體架構

開發 架構
本文將分析輕量級前端MVVM框架avalon的整體架構,以及其自調用匿名函數,對avalon感興趣的朋友可以參考。

官網提供架構圖

單看這個圖呢,還木有說明,感覺有點蛋疼,作者的抽象度太高了,還好在前面已經大概分析過了執行流程

如圖

  • 左邊是View視圖,我們就理解html結構,換句話就是說用戶能看到的界面,渲染頁面,綁定事件,切換類名,什么臟活都攬
  • 右邊是ViewModel 視圖模式,就是開發者通過avalon.define("xxx", function(vm){vm.firstName = "模型"})
  • 既然是MVVM 那么還有個M跑哪里去了,M在MVVM定義中,M只是一個過客,被VM給再次包裝,它與其他表示業務狀態的東西融入VM(ViewModel)中,一個普通的JS對象,可能是后臺傳過來的,也可能是直接從VM中拿到 vm.firstName = "模型" 這個就是M咯,所以作者在圖中就沒體現出來吧

從定義ViewModel開始,掃描到vm關聯的東東 形成訪問器,好吧其實整個就這么簡單。

打開avalon源碼,我們就看到這樣的結構:

  1. (function(DOC) {  
  2.  
  3.      內部代碼  
  4.  
  5. })(document); 

這種基本的結構雖然已經被寫爛了,但是既然是分析就從來到位來一遍吧。

自調用匿名函數

jquery為例

1. 這是一個自調用匿名函數。什么東東呢?在第一個括號內,創建一個匿名函數;第二個括號,立即執行

2. 為什么要創建這樣一個“自調用匿名函數”呢?

通過定義一個匿名函數,創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery創建的變量不能和導入他的程序所使用的變量發生沖突。 

3.  匿名函數從語法上叫函數直接量,JavaScript語法需要包圍匿名函數的括號,事實上自調用匿名函數有兩種寫法

  1. 寫法1  
  2. (function() {  
  3.     console.info( this );  
  4.     console.info( arguments );  
  5. }( window ) );  
  6.  
  7. 寫法2  
  8. (function() {  
  9.     console.info( this );  
  10.     console.info( arguments );  
  11. })( window ); 

4.為什么要傳入window呢?

通過傳入window變量,使得window由全局變量變為局部變量,當在jQuery代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關鍵所在,更重要的是,將window作為參數傳入,可以在壓縮代碼時進行優化,看看jquery- 1.6.1.min.js:

  1. (function(a,b){})(window); // window 被優化為 a 

5.為什么要在在參數列表中增加undefined呢?

在 自調用匿名函數 的作用域內,確保undefined是真的未定義。因為undefined能夠被重寫,賦予新的值。

  1. undefined = "now it's defined";  
  2. alert( undefined ); 

瀏覽器測試結果:

6.注意到源碼最后的分號了嗎?

分號是可選的,但省略分號并不是一個好的編程習慣;為了更好的兼容性和健壯性,請在每行代碼后加上分號并養成習慣。

總體架構

按代碼結構

  1. (function(DOC) {  
  2.  
  3.            //命名空間  
  4.            avalon = function(el) {  
  5.                 return new avalon.init(el);  
  6.            };  
  7.  
  8.            //avalon掛在工具函數  
  9.  
  10.            // 迷你jQuery對象的原型方法  
  11.  
  12.            //css操作相關的方法  
  13.  
  14.            //ecma262兼容補丁  
  15.  
  16.            //nextTick 高級定時器  
  17.  
  18.            //Observable 觀察者模式  
  19.  
  20.            //Define 模型定義方法  
  21.  
  22.            //Parse 解析求值函數與執行作用域  
  23.  
  24.            //Scan 節點掃描  
  25.  
  26.            //Bind html自定義標簽綁定處理方法  
  27.  
  28.         })(document); 

整個結構基本如上。

以后會分析具體的每個實現,源碼分析盡量到行……

原文鏈接:http://www.cnblogs.com/aaronjs/p/3143641.html

責任編輯:林師授 來源: 博客園
相關推薦

2023-06-27 16:42:18

Tinygrad深度學習工具

2020-11-11 12:13:59

JS

2022-08-10 12:21:07

PythonWebBottle

2011-03-02 10:03:44

SaturnJSJS

2022-02-12 21:05:11

異步爬蟲框架

2022-12-29 09:49:06

輕量級架構決策

2023-06-13 13:38:00

FlaskPython

2021-02-01 22:01:57

Coco工具macOS

2012-05-21 21:34:51

iOS

2021-07-01 09:08:03

Python網頁開發Flask

2021-06-26 10:03:35

Python框架Flask

2014-04-21 10:01:45

前后端分離

2009-07-14 18:05:28

輕量級Swing組件

2009-07-17 14:38:51

輕量級Swing組件

2021-08-10 06:08:24

MiniDaoJava框架

2021-03-30 10:26:08

MiniDao1.7.Java框架

2022-02-18 08:34:33

JavaSa-Token項目

2011-03-29 09:51:58

GuiceIOC

2018-01-17 15:05:22

框架設計爬蟲Scrapy

2011-11-28 09:16:24

Javajooq框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品久久影院 | 久草青青草 | 亚洲第一视频网 | 国产精品日韩在线 | 欧美综合久久 | 91国自视频 | 欧美一区二区在线视频 | h视频免费看 | 视频一区二区国产 | 日本成人福利视频 | 美女黄18岁以下禁止观看 | 久久国产区 | 久久成人精品视频 | 精品一区二区三区中文字幕 | 成人av网站在线观看 | 国产乱码精品一区二区三区av | 波多野结衣av中文字幕 | 一本一道久久a久久精品蜜桃 | 在线亚洲电影 | 日韩在线资源 | 精品国产乱码久久久久久闺蜜 | 国产专区在线 | 日韩毛片免费视频 | 精品视频一区二区 | 2019精品手机国产品在线 | 草逼网站| 瑞克和莫蒂第五季在线观看 | 91在线观看免费 | 欧美黄色大片在线观看 | 日产精品久久久一区二区福利 | 国产在线精品一区二区三区 | 亚洲精品片 | 欧美综合国产精品久久丁香 | 日韩高清国产一区在线 | 亚洲精品一区二区在线观看 | 成人精品一区二区三区 | av黄色在线观看 | 亚洲色欲色欲www | 一区二区三区视频在线 | 爱爱综合网 | 围产精品久久久久久久 |