Vue響應式原理

一、理解什么是代理對象

1.定義一個源對象

let obj1 = {
            name:'張三',
            age:20
        }

2.定義一個代理對象

 let obj2 = obj1

用代理對象修改源對象的數據

       obj2.name = '李四'
       obj2.age = 30

二舰攒、看一下Vue是如何使用代理對象

1.定義源對象myData
2.將源對象傳遞給Vue的Data選項败富,背后做了兩件事情
① 設置Vue實例的_data屬性,作為當前源對象的代理對象摩窃。(響應式的核心)
② 將_data里面代理的所有數據兽叮,再添加到當前Vue實例身上。(為了Vue實例方便調用數據)

 let myData = {
            name:'張三',
            age:20
        }
        let vm = new Vue({
           
            data:myData
        })

通過Vue的代理對象_data 修改name和age的值 能夠修改 data的值

        vm._data.name = '王五'
        vm._data.age = 18

三猾愿、給對添加屬性的幾種方式

let obj3 = {}
        //方式一:
        obj3.name = '張三'
        //方式二:
        obj3['age'] = 20
        //方式三:通過Object對象的defineProperty方法充择,給指定的對象添加指定的屬性
        // 使用這種方式,給對象添加的屬性匪蟀,默認不可被枚舉,不能被刪除
        // 使用這種方式宰僧,給對象添加的屬性材彪,對屬性的保護措施更加嚴格
        Object.defineProperty(obj3,'sex',{
            //屬性值
            value:'男',
            //允許被枚舉(默認不允許)
            enumerable:true,
            //允許被刪除(默認不允許)
            configurable:true
        })
        //通過delete關鍵,可以刪除對象身上的指定屬性
        delete obj3.name
        delete obj3.sex

四琴儿、Vue響應式的原理

 <div>
        <h2>姓名:<span id="name"></span></h2>
        <h2>年齡:<span id="age"></span></h2>
  </div>

在頁面中段化,顯示姓名和年齡

        document.querySelector('#name').innerHTML = data.name
        document.querySelector('#age').innerHTML = data.age

定義一個代理對象(使用_data 去代理 data)

 let _data = {}

使用Object.defineProperty給代理對象添加屬性

      注:在設置對象的屬性-時,不能夠設置value的值
        Object.defineProperty(_data,'name',{
            //get方法造成,用于返回屬性的值(當我們獲取name屬性獲取值時显熏,會調用get方法)
            get(){
                return data.name   //返回 data.name的值
            },
            //set方法,用于設置屬性的值(當我們設置name屬性設置值時晒屎,會調用set方法)
            set(val){
                data.name = val
                //當代理對象董虱,監(jiān)聽到數據發(fā)生變化了咕娄,就會重新渲染頁面
                document.querySelector('#name').innerHTML = data.name
            }
        })
        Object.defineProperty(_data,'age',{
            get(){
                return data.age
            },
            set(val){
                data.age = val
                //當代理對象,監(jiān)聽到數據發(fā)生變化了,就會重新渲染頁面
                document.querySelector('#age').innerHTML = data.age
            }
        })
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末昏滴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惑申,更是在濱河造成了極大的恐慌岩睁,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棘脐,居然都是意外死亡斜筐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門蛀缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顷链,“玉大人,你說我怎么就攤上這事内斯≡塘剩” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵俘闯,是天一觀的道長潭苞。 經常有香客問我,道長真朗,這世上最難降的妖魔是什么此疹? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮遮婶,結果婚禮上蝗碎,老公的妹妹穿的比我還像新娘。我一直安慰自己旗扑,他們只是感情好蹦骑,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臀防,像睡著了一般眠菇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袱衷,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天捎废,我揣著相機與錄音,去河邊找鬼致燥。 笑死登疗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的嫌蚤。 我是一名探鬼主播辐益,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脱吱!你這毒婦竟也來了荷腊?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤急凰,失蹤者是張志新(化名)和其女友劉穎女仰,沒想到半個月后猜年,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡疾忍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年乔外,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一罩。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡杨幼,死狀恐怖,靈堂內的尸體忽然破棺而出聂渊,到底是詐尸還是另有隱情差购,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布汉嗽,位于F島的核電站欲逃,受9級特大地震影響,放射性物質發(fā)生泄漏饼暑。R本人自食惡果不足惜稳析,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弓叛。 院中可真熱鬧彰居,春花似錦、人聲如沸撰筷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毕籽。三九已至奴潘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影钉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工掘剪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留平委,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓夺谁,卻偏偏與公主長得像廉赔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匾鸥,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容

  • 受現(xiàn)代JavaScript 的限制 (以及廢棄 Object.observe)蜡塌,Vue不能檢測到對象屬性的添加或刪...
    Kingtester閱讀 787評論 0 0
  • Vue.js 實現(xiàn)響應式的核心是利用了 ES5 的 Object.defineProperty,這也是為什么 Vu...
    時間的溺水者閱讀 314評論 0 0
  • 前言 Vue 最獨特的特性之一勿负,是其非侵入性的響應式系統(tǒng)馏艾。數據模型僅僅是普通的 JavaScript 對象。而當你...
    浪里行舟閱讀 2,023評論 0 16
  • 摘要: 搞懂Vue響應式原理! 作者:浪里行舟 原文:深入淺出Vue響應式原理 Fundebug經授權轉載琅摩,版權歸...
    Fundebug閱讀 5,493評論 0 9
  • 一些基本概念 同react的差異 區(qū)別與react铁孵,vue不使用jsx語法,主要使用插值語法'{}'與指令'v-x...
    squidbrother閱讀 121評論 0 0