久久精品中文字幕免费_91香蕉国产亚洲一区二区三区_国产精品巨作无遮拦_亚洲人成电影

    <center id="oy65s"><ol id="oy65s"></ol></center>

  • <menu id="oy65s"></menu>
    當前位置:首頁 > 足球資訊 > 正文內容

    vue源碼分析(1)- new Vue

    杏彩體育2年前 (2023-01-28)足球資訊52

    Vue.js 一個核心思想是數據驅動。所謂數據驅動,是指視圖是由數據驅動生成的,我們對視圖的修改,不會直接操作 DOM,而是通過修改數據。它相比我們傳統的前端開發(fā),如使用 jQuery 等前端庫直接修改 DOM,大大簡化了代碼量。特別是當交互復雜的時候,只關心數據的修改會讓代碼的邏輯變的非常清晰,因為 DOM 變成了數據的映射,我們所有的邏輯都是對數據的修改,而不用碰觸 DOM,這樣的代碼非常利于維護。

    從開始用vue 1.0做項目到現在的vue2.0,使用已經有2年了,一直在忙于做項目,沒有抽時間來對vue源碼進行一個徹底的理解以及梳理,最近下決心要把vue源碼梳理一遍,會有一系列的文章放出,有興趣的小伙伴可以關注下,歡迎騷擾。。。

    開始進入今天的正題,我們從最開始的一個new Vue來講起:

    那么vue在new Vue發(fā)生了什么事情呢?

    我們首先看一個vue源碼的結構:

    首先我們可以看到在vue的src/core/instance/index.js

    在講源碼之前,我們首先鋪墊一些javascript的基礎知識:

    構造函數:用來初始化新創(chuàng)建的對象的函數 例如:function Foo(){}

    實例對象: 通過構造函數的new操作創(chuàng)建的對象是實例對象,可以一個構造函數,構造多個實例對象 例如:var f1 = new Foo

    原型對象: 實例對象的原型對象 例如:Foo.prototype

    對于原型鏈的知識我們在這里并不過多闡述,只介紹三條簡單的原型鏈之間的關系:

    1 原型對象(Foo.prototype)的constructor 屬性 ====> 原型對象對應的構造函數(Foo)

    即:Foo.prototype.constructor === Foo

    2 實例對象( f1 )的constructor屬性 ====>原型對象對應的構造函數

    即: f1.constructor === Foo

    3 實例對象(f1)的_proto_屬性指向原型對象(Foo.prototype)

    即:f1.__proto__ === Foo.prototype

    好的,有了這些基礎知識,我們可以開始我們vue源碼的相關知識

    我們看到Vue 是通過new關鍵字進行實例化的,然后再這個函數里面調用了this._init方法,那么這個方法有什么作用呢,這個方法在src/core/instance/init.js里面定義:

    我們可以看到整個init方法實際上主要分為四個部分,我們一一解釋下部分作用

    第一部分主要是做一些參數的初始化,例如uid啊等

    第二部分主要是合并option,合并了options配置,這樣就可以通過vm.$options.el等訪問到創(chuàng)建實例時傳入的option

    第三部分主要是一堆初始化的函數,初始化生命周期,初始化事件中心,初始化渲染,初始化 data、props、computed、watcher 等等

    判斷vm實例是否存在vm.$options.el,存在的話就將vm掛載到這個dom節(jié)點上,存在會執(zhí)行$mount方法,在執(zhí)行$mount之前頁面并沒有改變,完成渲染,經過這一步,頁面上就會從:{{message}} 變?yōu)?Hello Vue。

    那有的人可能疑惑,我看完了init還是不理解,data是如何渲染到頁面上的,通過哪個方法渲染的,沒錯,你的疑惑是對的,截下來我們說一下,我們定義了data后我們可以通過message,為什么我們可以訪問到message呢?

    在2部分有個方法是有個initState方法,這個方法在src/core/instance/state.js里面:

    我們可以看到在這個函數中首先它會判斷是否有props,有的話執(zhí)行initProps,同樣data和methods一樣的邏輯,我們重點來看下initData這個函數:

    它從vm.$options.data里面拿到data也就是我們在new Vue里面定義的對象message,拿到后判斷它是否是個function,一般我們推薦data是個函數,return出來一個對象,判斷的結果會執(zhí)行getData函數:

    getData函數返回的data.call(vm, vm) 這個對象,然后就可以得出data = vm._data

    然后接下來的會執(zhí)行一個data一級method的判斷,如下圖所示:

    會判斷從vm.$option的props以及methods判斷兩者是否相等,因為有時候可能在props以及method會有同名,最終這兩者都會掛載上vm上,所以如果重名的話會沖突。

    那么如何掛載到vm上,掛載的實現是依靠proxy實現的:

    (關于proxy不懂同學可以查看阮一峰來時的es6講解)

    proxy方法內部的實現實際上就是定義了一個get和set,這里面最終使用Object.defineProperty就是把傳入的target即vm的key代理了下,通過劫持vm實例中屬性的getter和setter來實現對data的代理。

    看到這里我們理解了,當我們調用this.message時候,實際上我們調用了this._data.message,因為它實際使用了proxy做了代理proxy(vm, `data`, key)會將_data作為sourceKey傳入,這就是我們可以使用this.message可以訪問到this._data.message。

    在初始化的最后,檢測到如果有el屬性,則調用vm.$mount方法掛載vm,掛載的目標就是把模板渲染成最終的 DOM。

    下章,我們會梳理分析 Vue 的掛載過程。

    我的微信號13520229510 歡迎交流

    掃描二維碼推送至手機訪問。

    版權聲明:本文由財神資訊-領先的體育資訊互動媒體轉載發(fā)布,如需刪除請聯系。

    本文鏈接:http://www.daniuzhishi.com/?id=44538

    分享給朋友:

    “vue源碼分析(1)- new Vue” 的相關文章

    “離譜”比分折射校園足球癥結

    “離譜”比分折射校園足球癥結

    轉自:衢州日報   胡欣紅   一場原本無人問津的足球賽,因出現近似于籃球賽的比分,一時間成為網絡熱點。9月1日上午,浙江省第十七屆省運會足球女子乙組比賽第二輪中,對陣雙方是湖州隊和麗水隊。盡管現場沒有直播,但賽后一張44:0的記分牌照片和一段25秒的比賽視頻,還是讓這場比...

    足球為什么是世界第一運動?有何魅力?

    足球為什么是世界第一運動?有何魅力?

    12.27,補一個視頻,天下足球2018的告別——維猜 天足拿去了我成年后所有的眼淚—————————————————————————— 1 有一個桑德蘭小球迷叫“布拉德利”,他在2013年被...

    11月27日競彩足球賽事分析:世界杯 西班牙VS德國

    11月27日競彩足球賽事分析:世界杯 西班牙VS德國

    本文所寫的足球賽事分析,純屬個人愛好,無論黑紅請大家多多支持! 世界杯 西班牙VS德國 比賽時間:11月28日03點00分 西班牙 西班牙在世界杯首戰(zhàn)中以7-0的大比分戰(zhàn)勝了哥斯達黎加,也是以凈勝球的優(yōu)勢位列E組第一,接下來的賽程中面對德國和日本他們至少要在...

    球探比分:是真的不喜歡?C羅談壓迫足球:這東西已經發(fā)明很多年了

    球探比分:是真的不喜歡?C羅談壓迫足球:這東西已經發(fā)明很多年了

    點擊上方藍字,獲取更多大神球料。 C羅接受皮爾斯-摩根的獨家采訪完整版已釋出第一部分,球員對許多問題做出了自己的解釋。 其中,皮爾斯-摩根問到了關于“壓迫足球”的話題。 摩根提問道:“讓我吃驚的是,朗尼克剛來沒多久,就開始對記者說你壓迫力度不夠,或許該換個俱樂部了。...

    歐國聯-拉什福德進球 英格蘭1-2遭西班牙逆轉負

    歐國聯-拉什福德進球 英格蘭1-2遭西班牙逆轉負

    北京時間9月9日02:45(英國當地時間8日19:45),2018/19賽季歐洲國家聯賽A4組一場焦點戰(zhàn)在溫布利球場展開爭奪,英格蘭主場1比2不敵西班牙,拉什福德先拔頭籌,薩烏爾和羅德里戈連入2球反超。 雙方歷史交鋒25場,英格蘭12勝4...

    足球競彩天堂公推:二串一

    足球競彩天堂公推:二串一

    既然選擇,就要熱愛,熱愛就要堅持!昨日曼城又是暴打熱刺迎來16連勝,希望我們也能向曼城學習,長紅不斷!當然這也是一種愿望,很多時候需要多一點耐心。其實黑并不可怕,可怕的是不知道自己錯在哪,還不復盤。昨天大奶,大大奶,任九,收了個滿天紅,今天繼續(xù)加油,再次恭喜昨天收米的老鐵,下面來部分紅單養(yǎng)...

    ?