我所理解的MVC

1. MVC 三個(gè)對(duì)象

MVC即 Model+View+Controller 完慧,其中

  • M-Model數(shù)據(jù)模型:負(fù)責(zé)操作所有數(shù)據(jù)
//示例
let Model={
    data:{數(shù)據(jù)源},
    create:{增加數(shù)據(jù)},
    delete:{刪除數(shù)據(jù)},
    update(data){
        Object.assign(m.data,data)//用新數(shù)據(jù)替換舊數(shù)據(jù)
        eventBus.trigger('m:update')//eventBus觸發(fā)'m:update'信息谋旦,通知View刷新界面
    },
    get:{獲取數(shù)據(jù)}
}
  • V-View視圖:負(fù)責(zé)所有UI界面
//示例
let View={
    el:要刷新的元素,
    html:'要顯示在頁(yè)面上的內(nèi)容'
    init(){
        v.el:需要刷新的元素
    }屈尼,
    render(){
        刷新頁(yè)面
    }
}
  • C-Controller控制器:負(fù)責(zé)其他
//示例
let Controller={
    init(){
        v.init()//初始化View
        v.render()//第一次渲染頁(yè)面
        c.autoBindEvents()//自動(dòng)的事件綁定
        eventBus.on('m:update',()=>{v.render()}//當(dāng)enentsBus觸發(fā)'m:update'是View刷新
    }册着,
    events:{事件以哈希表的方式記錄存儲(chǔ)},
    method(){
        data=新數(shù)據(jù)
        m.update(data)
    },
    autoBindEvents(){自動(dòng)綁定事件}
}

2.EventBus 有哪些 API,是做什么用的脾歧,給出偽代碼示例

EventBus基本的api有on(監(jiān)聽事件)甲捏,trigger(emit)(觸發(fā)事件),off(取消監(jiān)聽)方法。
用于模塊間的通訊鞭执,view組件層面司顿,父子組件、兄弟組件通信都可以使eventbus處理

//EventBus.js
class EventBus {
    constructor() {
        this._eventBus = $(window)
    }
    on(eventName, fn) {
        return this._eventBus.on(eventName, fn)
    }
    trigger(eventName, data) {
        return this._trigger.trigger(eventName, data)
    }
    off(eventName, fn) {
        return this._eventBus.off(eventName, fn)
    }
}
export default EventBus
//new.js
import EventBus from 'EventBus.js'
const e = new EventBus()
e.on()
e.trigger()
e.off()

3.表驅(qū)動(dòng)編程是做什么的

表驅(qū)動(dòng)法是一種編程模式兄纺,從表(哈希表)里面查找信息而不是使用邏輯語(yǔ)句(if…else…switch大溜,可以減少重復(fù)代碼,只將重要的信息放在表里估脆,然后利用表來(lái)編程钦奋,與邏輯語(yǔ)句相比較有著更穩(wěn)定的復(fù)雜度
下面這段代碼相似性很高,當(dāng)我們使用表驅(qū)動(dòng)法后

bindEvents(){
  v.el.on('click', '#add1', () => {
    m.data.n += 1
    v.render(m.data.n)
  })
  v.el.on('click', '#minus1', () => {
    m.data.n -= 1
    v.render(m.data.n)
  })
  v.el.on('click', '#mul2', () => {
    m.data.n *= 2
    v.render(m.data.n)
  })
  v.el.on('click', '#divide2', () => {
    m.data.n /= 2
    v.render(m.data.n)
  })
}

將事件提取出一個(gè)哈希表,使邏輯和數(shù)據(jù)清晰明了的分離開

events: {
  'click #add1' : 'add',
  'click #minus1' : 'minus',
  'click #mul2' : 'mul',
  'click #divide2' : 'div'
},
add() {
  m.update( data: {n: m.data.n +1})
},
minus() {
  m.update( data: {n: m.data.n -1})
},
mul() {
  m.update( data: {n: m.data.n *2})
},
div() {
  m.update( data: {n: m.data.n /2})
}

上面的這種利用表格關(guān)系的代碼就等價(jià)于我們一開始的代碼付材,但是這種邏輯結(jié)構(gòu)更清晰

4.我是如何理解模塊化的

  1. 當(dāng)一個(gè)html文件需要實(shí)現(xiàn)多個(gè)功能的時(shí)候朦拖,我們可以把每個(gè)功能抽象成一個(gè)模塊,針對(duì)每一個(gè)功能開發(fā)不同的模塊厌衔,這使得模塊可以獨(dú)立開發(fā)贞谓,在工作中,不同的模塊也就可以交由不同的開發(fā)人員葵诈。
  2. 而且在開發(fā)中我們也會(huì)用到一些共同API,這個(gè)時(shí)候我們也可以把這些抽離成一個(gè)公用模塊祟同,當(dāng)需要引用這個(gè)函數(shù)或者功能的時(shí)候作喘,只需要在相應(yīng)的模塊里面用import導(dǎo)入相應(yīng)的包。
  3. so模塊化開發(fā)是一種管理方式晕城,是一種生產(chǎn)方式泞坦,一種解決問(wèn)題的方案,一個(gè)模塊就是實(shí)現(xiàn)特定功能的文件砖顷,有了模塊贰锁,我們就可以更方便地使用別人的代碼,想要什么功能滤蝠,就加載什么模塊
  4. 模塊化可以降低代碼耦合度豌熄,減少重復(fù)代碼,提高代碼重用性物咳,并且在項(xiàng)目結(jié)構(gòu)上更加清晰锣险,便于維護(hù)。
  • 模塊功能主要由兩個(gè)命令構(gòu)成:export和import览闰,export命令用于規(guī)定模塊的對(duì)外接口芯肤,import命令用于輸入其他模塊提供的功能
  • 一般來(lái)說(shuō),一個(gè)模塊就是一個(gè)獨(dú)立的文件压鉴,該文件內(nèi)部的所有變量崖咨,外部無(wú)法獲取,如果你希望外部能夠讀取模塊內(nèi)部的某個(gè)變量油吭,就必須使用export關(guān)鍵字輸出該變量

1击蹲、export

image.png

模塊功能主要由兩個(gè)命令構(gòu)成:export和import,export命令用于規(guī)定模塊的對(duì)外接口上鞠,import命令用于輸入其他模塊提供的功能
  一般來(lái)說(shuō)际邻,一個(gè)模塊就是一個(gè)獨(dú)立的文件,該文件內(nèi)部的所有變量芍阎,外部無(wú)法獲取世曾,如果你希望外部能夠讀取模塊內(nèi)部的某個(gè)變量,就必須使用export關(guān)鍵字輸出該變量

2、import

image.png

import命令接受一對(duì)大括號(hào)轮听,里面指定要從其他模塊導(dǎo)入的變量名骗露。大括號(hào)里面的變量名,必須與被導(dǎo)入模塊對(duì)外接口的名稱相同
  關(guān)于import其實(shí)還有很多用法血巍,具體的大家可以查看相關(guān)的文檔
3萧锉、import與import
通過(guò)export方式導(dǎo)出,在導(dǎo)入時(shí)要加{ }述寡,export default則不需要
在一個(gè)文件或模塊中柿隙,export、import可以有多個(gè)鲫凶,export default僅能有一個(gè)

image.png

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禀崖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子螟炫,更是在濱河造成了極大的恐慌波附,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼钻,死亡現(xiàn)場(chǎng)離奇詭異掸屡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)然评,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門仅财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碗淌,你說(shuō)我怎么就攤上這事满着。” “怎么了贯莺?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵风喇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缕探,道長(zhǎng)魂莫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任爹耗,我火速辦了婚禮耙考,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘潭兽。我一直安慰自己倦始,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布山卦。 她就那樣靜靜地躺著鞋邑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枚碗,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天逾一,我揣著相機(jī)與錄音,去河邊找鬼肮雨。 笑死遵堵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怨规。 我是一名探鬼主播陌宿,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼波丰!你這毒婦竟也來(lái)了限番?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤呀舔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扩灯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媚赖,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年珠插,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惧磺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捻撑,死狀恐怖磨隘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顾患,我是刑警寧澤番捂,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站江解,受9級(jí)特大地震影響设预,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犁河,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一鳖枕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桨螺,春花似錦宾符、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春则奥,著一層夾襖步出監(jiān)牢的瞬間考润,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工读处, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糊治,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓罚舱,卻偏偏與公主長(zhǎng)得像井辜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子管闷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 概述 歷史上粥脚,JavaScript 一直沒有模塊(module)體系,無(wú)法將一個(gè)大程序拆分成互相依賴的小文件包个,再用...
    emmet7life閱讀 617評(píng)論 0 0
  • 模塊通常是指編程語(yǔ)言所提供的代碼組織機(jī)制刷允,利用此機(jī)制可將程序拆解為獨(dú)立且通用的代碼單元。所謂模塊化主要是解決代碼分...
    MapleLeafFall閱讀 1,170評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評(píng)論 0 5
  • ES6模塊機(jī)制 commonjs 在node環(huán)境下跑 ES6 esModule 前段使用為主 webpack co...
    葉戲塵閱讀 818評(píng)論 0 2
  • 《我家那小子》那檔綜藝節(jié)目大家都看了嗎?看完后感覺朱雨辰可能一輩子都娶不到老婆了糯而。 最近《我家那小子》這檔節(jié)目蠻火...
    夜聽鋪?zhàn)?/span>閱讀 169評(píng)論 0 0