最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue數(shù)據(jù)響應(yīng)式原理知識點總結(jié)

 更新時間:2020年02月16日 08:40:50   作者:SlightFly  
在本篇文章里小編給各位整理的是一篇關(guān)于vue數(shù)據(jù)響應(yīng)式原理知識點總結(jié),有興趣的朋友們可以跟著學(xué)習(xí)下。

vue2.0數(shù)據(jù)響應(yīng)式原理

對象

Obect.defineproperty 定義對象的屬性mjm

defineproperty 其實不是核心的為一個對象做數(shù)據(jù)雙向綁定,而是去給對象做屬性標(biāo)簽,設(shè)置一系列操作權(quán)限,只不過屬性里的get和set實現(xiàn)了響應(yīng)式

var ob = {
  a: 1,
  b: 2
}
//1-對象 2-屬性 3-對于屬性的一系列配置
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認(rèn)都是true
  writable: false,
  enumerable: false,
  configurable: false
})
ob.a = 3
console.log(Object.getOwnPropertyDescriptor(ob, 'a'))
console.log(ob.a) //1
var ob = {
  a: 1,
  b: 2
}

//1-對象 2-屬性 3-對于屬性的一系列配置
/**
 * vue雙向數(shù)據(jù)綁定
 * 給ob的a屬性設(shè)置get/set方法,則獲取ob的a時,會觸發(fā)get方法,設(shè)置ob的a時,會觸發(fā)set方法
 */
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認(rèn)都是true
  get: function(){
    console.log('a- get') 
  },
  set: function(){
    console.log('a- set')

  }
})
ob.a = 3
console.log(ob.a) 
//正常用法,,,使用中轉(zhuǎn),不優(yōu)雅

var ob = {
  a: 1,
  b: 2
}

//1-對象 2-屬性 3-對于屬性的一系列配置
/**
 * vue雙向數(shù)據(jù)綁定
 * 給ob的a屬性設(shè)置get/set方法,則獲取ob的a時,會觸發(fā)get方法,設(shè)置ob的a時,會觸發(fā)set方法
 */
var _value = ob.a //_value 作為一個中轉(zhuǎn)
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認(rèn)都是true
  get: function(){
    console.log('a- get') 
    return _value;
  },
  set: function(newValue){
    console.log('a- set')
    _value = newValue;
  }
})
ob.a = 3
console.log(ob.a) //get方法必須return ,否則返回undefined

defineProperty 定義的get和set是對象的屬性,那么數(shù)組怎么辦?

  做了個裝飾者模式

/**
 * 概述  Object.create() 方法創(chuàng)建一個擁有指定原型和若干個指定屬性的對象。
 *            被創(chuàng)建的對象繼承另一個對象的原型,在創(chuàng)建新對象時可以指定一些屬性。
 * 語法  Object.create(proto, [ propertiesObject ])
 */
//數(shù)組 -- 做了個裝飾者模式
var arraypro = Array.prototype;
var arrob = Object.create(arraypro)
var arr = ['push', 'pop', 'shift']; //枚舉這三個,vue中還有其他
arr.forEach((method, index)=>{
  arrob[method] = function(){
    var ret = arraypro[method].apply(this,arguments);
    dep.notify();
  }
})

vue3.0數(shù)據(jù)響應(yīng)式原理 - Proxy

Proxy對象用于定義基本操作的自定義行為 ,用于修改某些操作的默認(rèn)行為,等同于在語言層面做出修改,所以屬于一種“元編程”(meta programming),即對編程語言進行編程。

  和defineProperty類似,功能幾乎一樣,但是用法不同

為什么要是用Procy?
  1、defineProperty只能監(jiān)聽某個屬性,不能對全對象監(jiān)聽
  2、所以可以省去 for in 提升效率
  3、可以監(jiān)聽數(shù)組,不用再去單獨對數(shù)組做特異性操作
改造的observer:

vue.prototype.observer = function(obj){ //注冊get/set監(jiān)聽
  var self = this;
  this.$data = new Proxy(this.$data, {
    get: function(target, key, receiver){
      return target[key]
    },
    set: function(target, key, value, receiver){
      // return Reflect.set(target, key, value);
      // return target[key] = value
      target[key] = value;
      self.render();
    }
  })
}

Proxy 用途 -- 校驗類型 -- 真正的私有變量

Diff算法和virtua doml

//1-對象 2-屬性 3-對于屬性的一系列配置

以上就是小編給大家整理的全部相關(guān)知識點,感謝大家的學(xué)習(xí)如果有任何疑問可以聯(lián)系腳本之家小編。

相關(guān)文章

  • 你不知道的SpringBoot與Vue部署解決方案

    你不知道的SpringBoot與Vue部署解決方案

    這篇文章主要介紹了你不知道的SpringBoot與Vue部署解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Vue嵌套iframe時$router.go(-1)后退bug的原因解析

    Vue嵌套iframe時$router.go(-1)后退bug的原因解析

    這篇文章主要介紹了Vue嵌套iframe,$router.go(-1)后退bug的問題原因及解決方法,本文給大家分享問題原因所在及解決方案,需要的朋友可以參考下吧
    2023-09-09
  • Vuex入門之Module使用詳解

    Vuex入門之Module使用詳解

    這篇文章主要介紹了Vuex入門之Module使用詳解,由于使用單一狀態(tài)樹,應(yīng)用的所有狀態(tài)會集中到一個比較大的對象,當(dāng)應(yīng)用變得非常復(fù)雜時,store?對象就有可能變得相當(dāng)臃腫,需要的朋友可以參考下
    2023-11-11
  • Vue keepalive學(xué)習(xí)用法及場景分析

    Vue keepalive學(xué)習(xí)用法及場景分析

    在Vue中,<keep-alive>的include屬性用于指定需要緩存的組件,本文給大家介紹Vue keepalive學(xué)習(xí)用法及場景分析,感興趣的朋友一起看看吧
    2025-03-03
  • vue路由實現(xiàn)登錄攔截

    vue路由實現(xiàn)登錄攔截

    這篇文章主要介紹了vue路由如何實現(xiàn)登錄攔截,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue?使用el-table循環(huán)輪播數(shù)據(jù)列表的實現(xiàn)

    vue?使用el-table循環(huán)輪播數(shù)據(jù)列表的實現(xiàn)

    這篇文章主要介紹了vue?使用el-table循環(huán)輪播數(shù)據(jù)列表的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3?父控件遠程獲取數(shù)據(jù)在子組件上顯示不出來的解決方案

    vue3?父控件遠程獲取數(shù)據(jù)在子組件上顯示不出來的解決方案

    這篇文章主要介紹了vue3?父控件遠程獲取數(shù)據(jù),在子組件上顯示不出來,本文給大家分享兩種解決方案幫助大家解決這個問題,需要的朋友可以參考下
    2023-08-08
  • Vue使用new?Blob()實現(xiàn)不同類型的文件下載功能

    Vue使用new?Blob()實現(xiàn)不同類型的文件下載功能

    這篇文章主要給大家介紹了關(guān)于Vue使用new?Blob()實現(xiàn)不同類型的文件下載功能的相關(guān)資料,在Vue項目中,經(jīng)常用Blob二進制進行文件下載功能,需要的朋友可以參考下
    2023-07-07
  • vue-cli 構(gòu)建骨架屏的方法示例

    vue-cli 構(gòu)建骨架屏的方法示例

    這篇文章主要介紹了vue-cli 構(gòu)建骨架屏的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue3中父子傳參常見方式及用法

    Vue3中父子傳參常見方式及用法

    在 Vue 3 中,父子組件之間進行通信有多種方式,下面簡單介紹下常見的方式及其用法和使用場景,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-01-01

最新評論

无棣县| 屏东市| 绥江县| 资中县| 汝州市| 东兰县| 叶城县| 天长市| 安阳市| 莱西市| 孝昌县| 东明县| 奉化市| 富锦市| 定州市| 通辽市| 藁城市| 高邑县| 吉隆县| 湘乡市| 平湖市| 扎兰屯市| 株洲市| 南靖县| 二连浩特市| 杭锦旗| 巨鹿县| 紫阳县| 蓝山县| 和林格尔县| 商都县| 镇安县| 福建省| 长顺县| 布拖县| 南昌市| 保山市| 镇沅| 青海省| 峨边| 济宁市|