Vue的繫結原理(注釋版)

2021-10-07 21:05:37 字數 2121 閱讀 8296

包含:選擇器屬性、閉包、遍歷物件、虛擬dom樹、觀察者模式、object.defineproperties()方法改造data中的變數、遞迴、匿名函式等

**(具體看注釋):

lang

="en"

>

>

charset

="utf-8"

>

name

="viewport"

content

="width=device-width, initial-scale=1.0"

>

>

documenttitle

>

head

>

>

>

welecomeh1

>

>

積分:>

}span

>

h2>

>

使用者名稱:>

}span

>

h2>

>

積分:>

}span

>

h2>

>

var data =

//vue第一步:改造data

//es5新函式:object.keys(obj) 獲取obj物件中的所有屬性名的列表

//獲得data物件中所有變數名(屬性名)

var keys = object.

keys

(data)

; console.

log(keys)

;//遍歷data中每個屬性

for(

var key of keys)

` //錯誤:在定義物件時,屬性名禁止使用反引號

//"_"+key //錯誤:在定義物件時,屬性名禁止拼接

[`_`

+key]:,

[key]:`

];//return this["_uname"]},

set(value)`]

= value;

//this["_uname"] = value

console.

log(`$

屬性變了`);

//知道變數變化,就自動呼叫change()方法,掃瞄數你dom樹,找到受影響的元素,更新真事dom樹上對應節點的內容

change

(key);}

, enumerable:

true}}

)(key);}

)}object.

seal

(data)

;//將每個屬性的configurable: false

console.

log(data)

;//vue第二部:構建虛擬dom樹,並完成首次繫結元素內容

//準備陣列儲存所有可能受影響的元素

var arr =

;//遞迴遍歷指定父元素下所有內容為}的元素

function

getchildren

(parent)

else

}中的變數名和data中某個屬性名一致,才有必要將元素新增到虛擬dom樹陣列中

if(c.innerhtml ==

`}}`))

;//在首次掃瞄是,還需要首次填充頁面內容

c.innerhtml = data[key];}

}}}}

getchildren

(document.body)

; console.

log(arr)

;//封裝虛擬dom樹並修改內容的方法

//根據賓士發生變化的屬性,查詢虛擬dom樹中受影響的節點,跟真事dom樹中節點的內容

// 比如 score

function

change

(key)}`)

}}//測試響應系統

setinterval

(function()

,2000);

script

>

body

>

html

>

Vue 雙向繫結的原理

vue雙向繫結的原理 大致思路 首先vue會使用documentfragment劫持根元素裡包含的所有節點,這些節點不僅包括標籤元素,還包括文字,甚至換行的回車。然後vue會把data中所有的資料,用defindproperty 變成vue的訪問器屬性,這樣每次修改這些資料的時候,就會觸發相應屬性的...

vue雙向繫結的原理

vue雙向繫結的原理 為什麼要學習雙向繫結的原理?面試提公升自我學習能力 vue實現雙向資料繫結的原理就是利用了 object.defineproperty 這個方法重新定義了物件獲取屬性值 get 和設定屬性值 set 的操作來實現的。它接收三個引數,要操作的物件,要定義或修改的物件屬性名,屬性描...

vue雙向繫結的原理

為什麼要學習雙向繫結的原理?面試提公升自我學習能力 vue雙向資料繫結的原理利用object.defineproperty 重新定義了物件獲取屬性值 get 和設定屬性值 set 的操作來實現的。用法 object.defineproperty 要操作的物件,要定義或修改的物件屬性名,屬性描述符 屬...