MVC 和 MVVM

一 MVC模式和MVVM模式

1.MVC模式
MVC是一種軟件架構(gòu)模式.把軟件分為三層(Model, View, Controller)

  • model 用來存儲數(shù)據(jù)皂股,做數(shù)據(jù)的持久化

  • view 用來展示數(shù)據(jù)

  • controller 用來控制程序的流程


    MVC模式.png

2.MVVM模式
mvvm 分為model(模型) view(視圖) viewModel(視圖模型)

  • model 用來存儲數(shù)據(jù)
  • view 用來展示數(shù)據(jù)
  • ViewModel 關(guān)聯(lián)數(shù)據(jù),和model實現(xiàn)雙向綁定。


    MVVM模式.png

二 實現(xiàn)雙向綁定

  • backbone 發(fā)布者訂閱者模式
    一般通過sub, pub的方式實現(xiàn)數(shù)據(jù)和視圖的綁定監(jiān)聽发乔,更新數(shù)據(jù)方式通常做法是 vm.set('property', value)
  • angular 臟值檢測
    angular.js 是通過臟值檢測的方式比對數(shù)據(jù)是否有變更琢锋,來決定是否更新視圖膨更,最簡單的方式就是通過 setInterval() 定時輪詢檢測數(shù)據(jù)變動剧董,當(dāng)然Google不會這么low,angular只有在指定的事件觸發(fā)時進入臟值檢測瑰妄,大致如下:
DOM事件,譬如用戶輸入文本钧大,點擊按鈕等翰撑。( ng-click )

XHR響應(yīng)事件 ( $http )

瀏覽器Location變更事件 ( $location )

Timer事件( $timeout , $interval )

執(zhí)行 $digest() 或 $apply()
  • vue 數(shù)據(jù)劫持(結(jié)合發(fā)布者訂閱者的模式)
    vue.js 則是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter眶诈,在數(shù)據(jù)變動時發(fā)布消息給訂閱者涨醋,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。

關(guān)于Object.defineProperty

語法:


Object.defineProperty(obj, prop, descriptor)

參數(shù)說明:

    obj:必需逝撬。目標(biāo)對象
    prop:必需浴骂。需定義或修改的屬性的名字
    descriptor:必需。目標(biāo)屬性所擁有的特性

返回值:

    傳入函數(shù)的對象宪潮。即第一個參數(shù)obj

針對屬性溯警,我們可以給這個屬性設(shè)置一些特性,比如是否只讀不可以寫狡相;是否可以被for..in或Object.keys()遍歷梯轻。
給對象的屬性添加特性描述,目前提供兩種形式:數(shù)據(jù)描述和存取器描述尽棕。

數(shù)據(jù)描述符

  • value
    屬性對應(yīng)的值,可以使任意類型的值喳挑,默認為undefined
  • writable
    屬性的值是否可以被重寫。設(shè)置為true可以被重寫滔悉;設(shè)置為false伊诵,不能被重寫。默認為false回官。
  • enumerable
    此屬性是否可以被枚舉(使用for...in或Object.keys())曹宴。設(shè)置為true可以被枚舉;設(shè)置為false歉提,不能被枚舉笛坦。默認為false。
  • configurable
    是否可以刪除目標(biāo)屬性或是否可以再次修改屬性的特性(writable, configurable, enumerable)唯袄。設(shè)置為true可以被刪除或可以重新設(shè)置特性弯屈;設(shè)置為false蜗帜,不能被可以被刪除或不可以重新設(shè)置特性恋拷。默認為false。

這個屬性起到兩個作用:

    目標(biāo)屬性是否可以使用delete刪除
    目標(biāo)屬性是否可以再次設(shè)置特性

一旦使用Object.defineProperty給對象添加屬性厅缺,那么如果不設(shè)置屬性的特性蔬顾,那么configurable、enumerable湘捎、writable這些值都為默認的false

存取描述
當(dāng)使用存取器描述屬性的特性的時候诀豁,允許設(shè)置以下特性屬性:

var obj = {};
Object.defineProperty(obj,"newKey",{
get:function (){} | undefined,
set:function (value){} | undefined
configurable: true | false
enumerable: true | false
});

注意:當(dāng)使用了getter或setter方法,不允許使用writable和value這兩個屬性

getter/setter

當(dāng)設(shè)置或獲取對象的某個屬性的值的時候窥妇,可以提供getter/setter方法舷胜。

getter 是一種獲得屬性值的方法

setter是一種設(shè)置屬性值的方法。

在特性中使用get/set屬性來定義對應(yīng)的方法活翩。

var obj = {};
var initValue = 'hello';
Object.defineProperty(obj,"newKey",{
get:function (){
//當(dāng)獲取值的時候觸發(fā)的函數(shù)
return initValue;
},
set:function (value){
//當(dāng)設(shè)置值的時候觸發(fā)的函數(shù),設(shè)置的新值通過參數(shù)value拿到
initValue = value;
}
});
//獲取值
console.log( obj.newKey ); //hello
//設(shè)置值
obj.newKey = 'change value';
console.log( obj.newKey ); //change value

configurable
當(dāng)且僅當(dāng)該屬性的 configurable 為 true 時烹骨,該屬性描述符才能夠被改變翻伺,同時該屬性也能從對應(yīng)的對象上被刪除。默認為 false沮焕。
enumerable
當(dāng)且僅當(dāng)該屬性的enumerable為true時吨岭,該屬性才能夠出現(xiàn)在對象的枚舉屬性中。默認為 false峦树。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辣辫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子魁巩,更是在濱河造成了極大的恐慌急灭,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谷遂,死亡現(xiàn)場離奇詭異化戳,居然都是意外死亡,警方通過查閱死者的電腦和手機埋凯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門点楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人白对,你說我怎么就攤上這事掠廓。” “怎么了甩恼?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵蟀瞧,是天一觀的道長。 經(jīng)常有香客問我条摸,道長悦污,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任钉蒲,我火速辦了婚禮切端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顷啼。我一直安慰自己踏枣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布钙蒙。 她就那樣靜靜地躺著茵瀑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躬厌。 梳的紋絲不亂的頭發(fā)上马昨,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音,去河邊找鬼鸿捧。 笑死抢呆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笛谦。 我是一名探鬼主播抱虐,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饥脑!你這毒婦竟也來了恳邀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灶轰,失蹤者是張志新(化名)和其女友劉穎谣沸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋颤,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡乳附,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伴澄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赋除。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖非凌,靈堂內(nèi)的尸體忽然破棺而出举农,到底是詐尸還是另有隱情,我是刑警寧澤敞嗡,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布颁糟,位于F島的核電站,受9級特大地震影響喉悴,放射性物質(zhì)發(fā)生泄漏棱貌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一箕肃、第九天 我趴在偏房一處隱蔽的房頂上張望婚脱。 院中可真熱鬧,春花似錦突雪、人聲如沸起惕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至问词,卻和暖如春督函,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工辰狡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锋叨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓宛篇,卻偏偏與公主長得像娃磺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叫倍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容