91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue數據響應式的原理是什么

發布時間:2021-06-16 18:01:31 來源:億速云 閱讀:276 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關vue數據響應式的原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

vue2.0數據響應式原理

對象

Obect.defineproperty 定義對象的屬性mjm

defineproperty 其實不是核心的為一個對象做數據雙向綁定,而是去給對象做屬性標簽,設置一系列操作權限,只不過屬性里的get和set實現了響應式

vue數據響應式的原理是什么

var ob = {
  a: 1,
  b: 2
}
//1-對象 2-屬性 3-對于屬性的一系列配置
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認都是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雙向數據綁定
 * 給ob的a屬性設置get/set方法,則獲取ob的a時,會觸發get方法,設置ob的a時,會觸發set方法
 */
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認都是true
  get: function(){
    console.log('a- get') 
  },
  set: function(){
    console.log('a- set')

  }
})
ob.a = 3
console.log(ob.a) 
[object Object]
//正常用法,,,使用中轉,不優雅

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

//1-對象 2-屬性 3-對于屬性的一系列配置
/**
 * vue雙向數據綁定
 * 給ob的a屬性設置get/set方法,則獲取ob的a時,會觸發get方法,設置ob的a時,會觸發set方法
 */
var _value = ob.a //_value 作為一個中轉
Object.defineProperty(ob, 'a' , { //a對象則是ob的絕對私有屬性,,默認都是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

vue數據響應式的原理是什么

vue數據響應式的原理是什么

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

  做了個裝飾者模式

/**
 * 概述  Object.create() 方法創建一個擁有指定原型和若干個指定屬性的對象。
 *            被創建的對象繼承另一個對象的原型,在創建新對象時可以指定一些屬性。
 * 語法  Object.create(proto, [ propertiesObject ])
 */
//數組 -- 做了個裝飾者模式
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數據響應式原理 - Proxy

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

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

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

vue.prototype.observer = function(obj){ //注冊get/set監聽
  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-對于屬性的一系列配置

以上就是vue數據響應式的原理是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

公安县| 铅山县| 高雄县| 江川县| 穆棱市| 兖州市| 丁青县| 阜康市| 内丘县| 和硕县| 筠连县| 新兴县| 衡南县| 庄河市| 马关县| 岳阳县| 寻乌县| 酉阳| 武陟县| 榆林市| 宜丰县| 宜良县| 临沭县| 崇左市| 彭水| 庆阳市| 北辰区| 龙南县| 浠水县| 裕民县| 疏附县| 通道| 云和县| 沂源县| 大宁县| 丰城市| 榆社县| 图片| 长顺县| 汝州市| 齐齐哈尔市|