成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

vue源碼學(xué)習(xí)之簡單的數(shù)據(jù)監(jiān)聽

zone / 2006人閱讀

摘要:先實(shí)現(xiàn)一個簡單的數(shù)據(jù)劫持。思路遍歷對象的每個屬性,為每個屬性掛上監(jiān)聽函數(shù)即利用進(jìn)行元編程考慮屬性的子屬性的監(jiān)聽先上代碼你訪問了你設(shè)置了新的其中涉及的知識點(diǎn)如果屬性值還是對象,則遞歸繼續(xù)

先實(shí)現(xiàn)一個簡單的數(shù)據(jù)劫持。
思路:

遍歷對象的每個屬性,為每個屬性掛上監(jiān)聽函數(shù)(即利用Object.defineProperty進(jìn)行元編程);

考慮屬性的子屬性的監(jiān)聽;
先上代碼:

function Observer(data) {
    this.data = data;
    this.walk(data);
}
Observer.prototype.walk = function(obj) {
    var val;
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            val = obj[key];

            if (obj[key] instanceof Object) {
                new Observer(obj[key]);
            }

            this.convert(key, val);
        }
    }
}
Observer.prototype.convert = function(key, val) {
    Object.defineProperty(this.data, key, {
        enumerable: true,
        configurable: true,
        get: function() {
            console.log("你訪問了" + key);
            return val;
        },
        set: function(newVal) {
            console.log("你設(shè)置了" + key);
            console.log("新的" + key + "=" + newVal);
            if (val === newVal) {
                return;
            }
            val = newVal;
        }
    });
}
var data = {
    user: {
        name: "lixixi",
        age: "24"
    },
    address: {
        city: "beijing"
    }
};

var app = new Observer(data);

其中涉及的知識點(diǎn):

Object.defineProperty(object, key, {});

如果屬性值還是對象,則遞歸繼續(xù)new Observer;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82130.html

相關(guān)文章

  • React學(xué)習(xí)之深入Redux應(yīng)用框架

    摘要:作為大型應(yīng)用狀態(tài)管理最常用的工具。它是一個應(yīng)用數(shù)據(jù)流框架,與框架類似。這是觸發(fā)變化的惟一途徑。在這個函數(shù)內(nèi)部,被調(diào)用,其作用是監(jiān)測是的。否則的話,認(rèn)為只是一個普通的,將通過也就是進(jìn)一步分發(fā)。到此源碼的主要部分學(xué)習(xí)結(jié)束。 Redux作為大型React應(yīng)用狀態(tài)管理最常用的工具。它是一個應(yīng)用數(shù)據(jù)流框架,與Flux框架類似。它是零依賴的,可以配合其他框架或者類庫一起使用。雖然在平時的工作中很多...

    張漢慶 評論0 收藏0
  • jQuery源碼學(xué)習(xí)之event

    摘要:回調(diào)隊(duì)列中的元素是對象,代表一個事件回調(diào),擁有多個屬性,如等等,其中是回調(diào)函數(shù),在觸發(fā)時通過傳遞,具體的在后面講。類型是時鍵表示事件名,規(guī)則同上,鍵值表示事件觸發(fā)時的回調(diào)函數(shù)。 jQuery源碼學(xué)習(xí)之event jQuery的事件機(jī)制為異步回調(diào),事件監(jiān)聽的屬性、參數(shù)和回調(diào)的等保存在Data實(shí)例中,在元素上保存該對象的引用。有方法handle,內(nèi)部執(zhí)行dispatch;有屬性events...

    XboxYan 評論0 收藏0
  • 前端學(xué)習(xí)之JS框架使用

    摘要:目前,有三個明確的框架可供選擇。和在眾多開源框架中贏得了開發(fā)人員和公司的信任。雖然這三個框架有許多共同之處,但它們的受歡迎程度因行業(yè)而異。使用,這有助于在編碼時發(fā)現(xiàn)并糾正常見錯誤。 人們首先注意到的是你的應(yīng)用程序的視覺吸引力。大多數(shù)用戶傾向于將界面設(shè)計(jì)與公司的信譽(yù)和專業(yè)能力聯(lián)系起來。這就是為什么選擇正確的前端技術(shù)對你的業(yè)務(wù)...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<