您好,登錄后才能下訂單哦!
如何在vue中使用Object.defineProperty監聽對象屬性?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
let a = {'b': 1}; Object.defineProperty(a, 'b', { enumerable: false, configurable: false, get: function(){ console.log('b' + '被訪問'); }, set: function(newVal){ console.log('b' + '被修改,新' + 'b' + '=' + newVal); } }); a.b = 2; // b被修改,新b=2 a.b; // b被訪問
這樣,我們就能監聽對象了!但問題并不僅僅這么簡單。。。
我們可能會有對象中屬性的值還是對象這種嵌套情況,可以通過遞歸解決!
在vue源代碼文件 srcobserveobserver.js 中
// 觀察者構造函數 function Observer(data){ this.data = data; this.walk(data); } let p = Observer.prototype; p.walk = function(obj){ let val; for(let key in obj){ // 通過 hasOwnProperty 過濾掉一個對象本身擁有的屬性 if(obj.hasOwnProperty(key)){ val = obj[key]; // 遞歸調用 循環所有對象出來 if(typeof val === 'object'){ new Observer(val); } this.convert(key, val); } } }; p.convert = function(key, val){ Object.defineProperty(this.data, key, { enumerable: false, configurable: false, get: function(){ console.log(key + '被訪問'); }, set: function(newVal){ console.log(key + '被修改,新' + key + '=' + newVal); if(newVal === val) return ; val = newVal; } }) }; let data = { user: { name: 'zhangsan', age: 14 }, address: { city: 'beijing' } } let app = new Observer(data); data.user.name; // user被訪問
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發者使用vue。
關于如何在vue中使用Object.defineProperty監聽對象屬性問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。