亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于vue實例化屬性的一些問題

關于vue實例化屬性的一些問題

慕桂英546537 2018-12-21 15:11:20
在開始學vue的現在,我在實例化vue之后,在全局變量通過app.bool來改變new VUE{(里面的屬性值)};十分想知道,在我們日常的實例化對象中,vue是通過何種模式來實現這種方式。有大神能否通過例子來說明。我自己也嘗試著模仿vue這種方式來做,發現自己的知識有限
查看完整描述

1 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

監聽 data 變化的原理:

/**

  Observer是將輸入的Plain Object進行處理,利用Object.defineProperty轉化為getter與setter,

  從而在賦值與取值時進行攔截

  這是Vue響應式框架的基礎

 */

function isObject(obj){

    return obj != null && typeof(obj) == 'object';

}

function isPlainObject(obj){

    return Object.prototype.toString(obj) == '[object Object]';

}


function observer(data){

    if(!isObject(data) || !isPlainObject(data)){

        return;

    }

    return new Observer(data);

}


var Observer = function(data){

    this.data = data;

    this.transform(data);

};


Observer.prototype.transform = function(data){

    for(var key in data){

        var value = data[key];

        Object.defineProperty(data,key,{

            enumerable:true,

            configurable:true,

            get:function(){

                console.log("intercept get:"+key);

                return value;

            },

            set:function(newVal){

                console.log("intercept set:"+key);

                if(newVal == value){

                    return;

                }

                data[key] = newVal;

            }

        });


        //遞歸處理

        this.transform(value);


    }

};

參考:理解 vue 實現原理

查看完整回答
反對 回復 2019-01-26
  • 1 回答
  • 0 關注
  • 616 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號