欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

對(duì)象

Obect.defineproperty 定義對(duì)象的屬性mjm

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

var ob = {
  a: 1,
  b: 2
}
//1-對(duì)象 2-屬性 3-對(duì)于屬性的一系列配置
Object.defineProperty(ob, 'a' , { //a對(duì)象則是ob的絕對(duì)私有屬性,,默認(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-對(duì)象 2-屬性 3-對(duì)于屬性的一系列配置
/**
 * vue雙向數(shù)據(jù)綁定
 * 給ob的a屬性設(shè)置get/set方法,則獲取ob的a時(shí),會(huì)觸發(fā)get方法,設(shè)置ob的a時(shí),會(huì)觸發(fā)set方法
 */
Object.defineProperty(ob, 'a' , { //a對(duì)象則是ob的絕對(duì)私有屬性,,默認(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-對(duì)象 2-屬性 3-對(duì)于屬性的一系列配置
/**
 * vue雙向數(shù)據(jù)綁定
 * 給ob的a屬性設(shè)置get/set方法,則獲取ob的a時(shí),會(huì)觸發(fā)get方法,設(shè)置ob的a時(shí),會(huì)觸發(fā)set方法
 */
var _value = ob.a //_value 作為一個(gè)中轉(zhuǎn)
Object.defineProperty(ob, 'a' , { //a對(duì)象則是ob的絕對(duì)私有屬性,,默認(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是對(duì)象的屬性,那么數(shù)組怎么辦?

  做了個(gè)裝飾者模式

/**
 * 概述  Object.create() 方法創(chuàng)建一個(gè)擁有指定原型和若干個(gè)指定屬性的對(duì)象。
 *            被創(chuàng)建的對(duì)象繼承另一個(gè)對(duì)象的原型,在創(chuàng)建新對(duì)象時(shí)可以指定一些屬性。
 * 語(yǔ)法  Object.create(proto, [ propertiesObject ])
 */
//數(shù)組 -- 做了個(gè)裝飾者模式
var arraypro = Array.prototype;
var arrob = Object.create(arraypro)
var arr = ['push', 'pop', 'shift']; //枚舉這三個(gè),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對(duì)象用于定義基本操作的自定義行為 ,用于修改某些操作的默認(rèn)行為,等同于在語(yǔ)言層面做出修改,所以屬于一種“元編程”(meta programming),即對(duì)編程語(yǔ)言進(jìn)行編程。

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

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

vue.prototype.observer = function(obj){ //注冊(cè)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 用途 -- 校驗(yàn)類型 -- 真正的私有變量

Diff算法和virtua doml

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

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

相關(guān)文章

  • 使用Element+vue實(shí)現(xiàn)開始與結(jié)束時(shí)間限制

    使用Element+vue實(shí)現(xiàn)開始與結(jié)束時(shí)間限制

    這篇文章主要為大家詳細(xì)介紹了使用Element+vue實(shí)現(xiàn)開始與結(jié)束時(shí)間限制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 解決vue的變量在settimeout內(nèi)部效果失效的問題

    解決vue的變量在settimeout內(nèi)部效果失效的問題

    今天小編就為大家分享一篇解決vue的變量在settimeout內(nèi)部效果失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K)

    Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K)

    這篇文章主要介紹了Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Vue拖拽排序組件Vue-Slicksort解讀

    Vue拖拽排序組件Vue-Slicksort解讀

    這篇文章主要介紹了Vue拖拽排序組件Vue-Slicksort,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vite配置代理Proxy解決跨域問題小結(jié)

    Vite配置代理Proxy解決跨域問題小結(jié)

    我們?cè)谧鲰?xiàng)目的時(shí)候經(jīng)常會(huì)遇到跨域的問題,下面這篇文章主要給大家介紹了關(guān)于Vite配置代理Proxy解決跨域問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Vue實(shí)現(xiàn)文字上下滾動(dòng)動(dòng)畫的示例代碼

    Vue實(shí)現(xiàn)文字上下滾動(dòng)動(dòng)畫的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue實(shí)現(xiàn)超酷文字上下滾動(dòng)動(dòng)畫,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-03-03
  • Vue項(xiàng)目打包部署總結(jié)篇

    Vue項(xiàng)目打包部署總結(jié)篇

    這篇文章主要介紹了Vue項(xiàng)目打包部署總結(jié)篇,關(guān)于Vue項(xiàng)目發(fā)布的相關(guān)問題就先總結(jié)這么多,幾乎在每一步都踩過坑才有所體會(huì),有問題歡迎各位同學(xué)一起探討,需要的朋友可以參考下
    2024-08-08
  • Vue?data中隨意改一個(gè)屬性,視圖都會(huì)更新嗎?

    Vue?data中隨意改一個(gè)屬性,視圖都會(huì)更新嗎?

    這篇文章主要討論Vue?data中隨意改一個(gè)屬性,視圖都會(huì)更新嗎?下面來自面試官的問題然后做i出的一個(gè)問題總結(jié),具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2021-12-12
  • vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法

    vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法

    本篇文章主要介紹了vue2 前后端分離項(xiàng)目ajax跨域session問題解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Vue3視頻播放器組件Vue3-video-play新手入門教程

    Vue3視頻播放器組件Vue3-video-play新手入門教程

    這篇文章主要給大家介紹了關(guān)于Vue3視頻播放器組件Vue3-video-play新手入門教程的相關(guān)資料,本文實(shí)例為大家分享了vue-video-player視頻播放器的使用配置,供大家參考,需要的朋友可以參考下
    2023-12-12

最新評(píng)論