中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何在vue中使用Object.defineProperty監聽對象屬性

發布時間:2021-05-25 18:06:54 來源:億速云 閱讀:224 作者:Leah 欄目:web開發

如何在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

Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網頁中相應的地方,所以越來越多的前端開發者使用vue。

關于如何在vue中使用Object.defineProperty監聽對象屬性問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

杭锦旗| 定州市| 锡林郭勒盟| 崇信县| 河东区| 辛集市| 长子县| 合作市| 米泉市| 腾冲县| 长岛县| 三穗县| 沂南县| 水富县| 揭东县| 大宁县| 东兴市| 乌拉特后旗| 永寿县| 洱源县| 合江县| 遂宁市| 苏尼特右旗| 施甸县| 屯留县| 吕梁市| 耿马| 如皋市| 平江县| 芒康县| 磴口县| 西丰县| 江都市| 海城市| 普兰店市| 仙居县| 邯郸市| 睢宁县| 东乌| 浏阳市| 溧水县|