国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

代碼詳解Vuejs響應式原理

來源:懂視網 責編:小采 時間:2020-11-27 22:23:21
文檔

代碼詳解Vuejs響應式原理

代碼詳解Vuejs響應式原理:響應式原理 > vuejs中的模型(model)和視圖(view)是保持同步的,在修改數據的時候會自動更新視圖,這其實依賴于Object.defineProperty方法,所以vuejs不支持IE8及以下版本,vuejs通過劫持getter/setter方法來監聽數據的變化,通過getter進
推薦度:
導讀代碼詳解Vuejs響應式原理:響應式原理 > vuejs中的模型(model)和視圖(view)是保持同步的,在修改數據的時候會自動更新視圖,這其實依賴于Object.defineProperty方法,所以vuejs不支持IE8及以下版本,vuejs通過劫持getter/setter方法來監聽數據的變化,通過getter進

響應式原理

> vuejs中的模型(model)和視圖(view)是保持同步的,在修改數據的時候會自動更新視圖,這其實依賴于Object.defineProperty方法,所以vuejs不支持IE8及以下版本,vuejs通過劫持getter/setter方法來監聽數據的變化,通過getter進行依賴收集,在數據變更執行setter的時候通知視圖更新。

Object.defineProperty

> Object.defineProperty可以定義對象的屬性或修改對象的屬性
> 目前可以通過 Object.defineProperty描述的屬性分為兩種:數據屬性和訪問器屬性

// obj: 對象
// prop: 對象中的屬性
// descriptor: 對象中的屬性的特性
Object.defineProperty(obj,prop,descriptor);

數據屬性 > 數據屬性的descriptor包含四種:value、writable、enumerable、configurable

var person = {
 name: 'json',
 age: 18
}

Object.defineProperty(person, 'name', {
 value: 'John', // 屬性的值,默認為undefined
 writable: false, // 是否可以重寫屬性的值,設為false便是只讀的
 enumerable: false, // 是否可枚舉(for in或Object.keys),默認為false
 configurable: true // 是否可以刪除或者重新設定上述配置,默認為false
})

person.name = 'new name';
console.log(person.name); // 'John'

for(key in person) console.log(person[key]); // 18

Object.defineProperty(person, 'name', {
 writable: true, 
 enumerable: true, 
 configurable: false 
})

person.name = 'new name';
console.log(person.name); // 'new name'

for(key in person) console.log(person[key]); // 'new name',18

訪問器屬性 > 訪問器屬性的desciptor包含四種:get、set、enumerable、configurable

var person = { _age: 20 };

Object.defineProperty(person, 'age',{
 get: function(){
 return this._age;
 },
 set: function(age){
 this._age = age < 0 ? 0 : age;
 }
});

person.age = 5; // _age == 5
person.age = -3; // _age == 0
person._age = -3; // _age == -3

Vuejs劫持數據的做法

function observer(value, cb) {
 // 遍歷對象的所有屬性并為對象添加對應的訪問器屬性
 Object.keys(value).forEach((key) => defineReactive(value, key, value[key] , cb))
}
function defineReactive (obj, key, val, cb) {
 Object.defineProperty(obj, key, {
 enumerable: true,
 configurable: true,
 get: ()=>{
 /*....依賴收集等....*/
 },
 set:newVal=> {
 cb();/*訂閱者收到消息的回調,這里為render函數,即重新渲染*/
 }
 })
}
class Vue {
 constructor(options) {
 this._data = options.data;
 observer(this._data, options.render) /*把所有數據變成可觀察的*/
 }
}
let app = new Vue({
 el: '#app',
 data: {
 text: 'text',
 text2: 'text2'
 },
 render(){
 console.log("render");
 }
})

殘留問題 > 上述實現只有通過app._data_text才會觸發set,那么怎樣才能做到app.text就能觸發set呢
代理

> 通過在this對象中添加訪問器屬性即可實現代理,然后就可以用app.text來代替app._data.text了

_proxy(options.data);/*構造函數中*/

/*代理*/
function _proxy (data) {
 const that = this;
 Object.keys(data).forEach(key => {
 Object.defineProperty(that, key, {
 configurable: true,
 enumerable: true,
 get: function proxyGetter () {
 return that._data[key];
 },
 set: function proxySetter (val) {
 that._data[key] = val;
 }
 })
 });
}

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

代碼詳解Vuejs響應式原理

代碼詳解Vuejs響應式原理:響應式原理 > vuejs中的模型(model)和視圖(view)是保持同步的,在修改數據的時候會自動更新視圖,這其實依賴于Object.defineProperty方法,所以vuejs不支持IE8及以下版本,vuejs通過劫持getter/setter方法來監聽數據的變化,通過getter進
推薦度:
標簽: 原理 VUE js
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产97在线观看 | 亚洲视频免费在线观看 | 中文字幕日韩精品有码视频 | 99精品视频在线观看免费 | 久久精品日日躁夜夜躁欧美 | 自拍网在线| 明星国产欧美日韩在线观看 | 欧美色图亚洲自拍 | 性夜影院爽黄a爽免费看网站 | 国产一区成人 | 欧美日韩国产一区二区三区播放 | 伊人久久国产 | 久久国产精品一区二区三区 | a级网站| 亚洲欧美一区二区三区孕妇 | 亚洲成人精品久久 | 欧美精品免费在线 | 精品一区二区三区五区六区七区 | 成人区精品一区二区毛片不卡 | 国产一区亚洲欧美成人 | 亚洲青草| 国产日产欧美一区二区三区 | 北条麻妃在线播放 | 香蕉久久精品 | 韩国演艺圈一区二区三区 | 成人久久久精品乱码一区二区三区 | 日韩 亚洲 制服 欧美 综合 | 伊人婷婷在线 | 一区二区三区在线 | 日本色图在线 | 欧美爱爱图 | 99久久国内精品成人免费 | 国产欧美精品区一区二区三区 | 波多野氏免费一区 | 亚洲欧洲日本在线观看 | 永久视频在线观看 | 国产欧美一区二区精品性色99 | 欧美一级在线 | 精品免费久久久久国产一区 | 成人区精品一区二区不卡亚洲 | 性色a v 一区 |