vue源碼分析(1)

vue源碼分析之前涉及的一些小知識點,記錄一下:

  • [ ].slice.call(lis) :將偽數(shù)組轉(zhuǎn)化成真數(shù)組。
  • node.nodeType:得到節(jié)點類型。
  • Obj.defineProperty:定義屬性
    defineProperty(obj,propertyName,{ }) :給對象添加屬性(指定描述符)

屬性描述符:

  1. 數(shù)據(jù)描述符
    configurable:是否可以重新定義
    enumerable:是否可以枚舉
    value:初始值
    writable:是否可以修改屬性值
  2. 訪問描述符
    get:回調(diào)函數(shù),根據(jù)其他相關(guān)的屬性動態(tài)計算得到當(dāng)前屬性值。
    set:回調(diào)函數(shù),監(jiān)視當(dāng)前屬性值的變化,更新其他相關(guān)的屬性值。

const obj = {
    firstName:'A',
    lastName:'B'
  }
// 給obj添加fullName屬性    同時改變obj中firstName,lastName時 fullName也改變 ,同理,改變
//firstName時,firstName,lastName也改變
Object.defineProperty(obj,'fullName',{
    get(){   
        return this.firstName + '-' +this.lastName;
      },
    set(value){
         const names = value.split('-');
         this.firstName = names[0] ;
         this.lastName = names[1] ;
      }
    })
console.log(obj.fullName)       //A-B
obj.firstName = 'C';
obj.lastName = 'D';
console.log(obj.fullName)      //C-D
obj.fullName = 'E-F';
console.log(obj.firstName)      //C
console.log(obj.lastName)      //D


Object.defineProperty(obj,'fullName2',{
   configurable:false,        //不能重新定義
   enumerable:false,         //不能枚舉
   value:'G-H',
    writable:true            //不能修改屬性值
    })
  • Object.keys(obj):得到對象自身可枚舉屬性組成的數(shù)組。
Object.keys(obj);          //  [firstName, lastName]
  • obj.hasOwnProperty(prop):判斷prop是否是obj自身的屬性。
  • DocumentFragment :文檔碎片(高效批量更新多個節(jié)點 )。

document:對應(yīng)顯示的頁面,包含n個element,一旦更新document內(nèi)部的某個元素,界面也會更新(DocumentFragment可以解決這個問題)。
DocumentFragment: 內(nèi)存中保存n個element容器對象(不與界面關(guān)聯(lián)),如果更新framgnet中的某個element,界面不會更新。(批量更新)

  • vue數(shù)據(jù)代理:通過vm對象來代理data對象中所有屬性的操作。
  1. 通過Object.defineProperty()給vm添加與data對象的屬性對應(yīng)的屬性描述符。
  2. 所有添加的屬性都包含getter/setter。
  3. getter/setter內(nèi)部操作data對應(yīng)的屬性數(shù)據(jù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容