vue 中 陣列劫持

2021-10-17 15:08:17 字數 903 閱讀 1000

vue中物件劫持:

object.defineproperty(obj, prop, descriptor)
1 obj:必需。目標物件

2 prop:必需。需定義或修改的屬性的名字

3 descriptor:必需。目標屬性所擁有的特性

這個介紹的比較多,就不展開了。

vue中陣列劫持:劫持push方法

let state = [1, 2, 3]; // 變成響應式資料

let originalarray = array.prototype; // 陣列原來的方法

let arraymethods = object.create(originalarray); // 複製乙個跟原來一樣的物件

function definereactive(obj)

obj.__proto__ = arraymethods;

}definereactive(state); // 呼叫函式劫持

// 插入到頁面的功能 需要儲存起來

function render()

render();

// 執行push操作

state.push(5);

主要劫持以下7種:

let methodstopatch = [

'push',

'pop',

'unshift',

'shift',

'sort',

'splice',

'reverse'

]

vue陣列的劫持

監控陣列的變化 主要要做的就是攔截使用者呼叫的push shift unshift pop reverse sort splice 導致原陣列發生變化 concat 先獲取老的陣列的方法,只改寫這7個方法 let oldarrayprotomethods array.prototype 拷貝的乙個新...

vue中的資料劫持

在瀏覽一篇博文的時候,看到裡面提到了vue中資料劫持的概念,之前只是知道有這個東西,知道這個東西是vue的核心之一,是實現資料雙向繫結的重要原理,但並未深入研究,那麼今天就借這篇文章學習整理一下vue中的資料劫持到底是什麼。在面經中最常見的問題之一就是,你知道雙向繫結嗎,知道什麼是mvvm嗎?學術性...

vue 資料劫持

其實,並沒有這麼 神奇 的事,資料劫持的核心就是在 物件的身上重新定義被 物件所有可列舉屬性,並設定 getter 和 setter 監視著它的變化,然而實現這個核心功能就是乙個方法 object.defineproperty 通過該方法在例項物件上重新定義了和data物件裡面的所有屬性,然而就實現...