一,MVC 三个对象分别做什么,以及伪代码示例:
MVC是一种设计模式,是一个万金油,用来优化所有代码结构。
1、M-Model(数据模型)负责操作所有数据
var model = {
data: null,
init(){}
fetch(){}
save(){}
update(){}
delete(){}
}
2、V-View(视图)负责所有UI界面
view = {
init(){}
template: '<h1>h1</h1>'
}
3、C-Controller(控制器)负责其他
controller = {
view: null,
model: null,
init(view, model){
this.view = view
this.model = model
this.bindEvents()
}
render(){
this.view.querySelector('name').innerText = this.model.data.name),
bindEvents(){}
}
二,EventBus 有哪些 API,是做什么用的,以及伪代码示例:
EventBus 基本的 API 有 on (监听事件), trigger (触发事件), off (取消监听)方法。
用于模块间的通讯, view 组件层面,父子组件、兄弟组件通信都可以使 eventbus 处理
//EventBus.j代码
class EventBus{
constructor(){
this._eventBus =$(window)
}
on(eventName, fn){
return this._eventBus.on(eventName,fn)
}
trigger(eventName,data){
return this._trigger.tiggger(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()
三,表驱动编程是做什么的?
表驱动法是一种编程模式,从表(哈希表)里面查找信息而不是使用逻辑语句(if…else…switch,可以减少重复代码,只将重要的信息放在表里,
然后利用表来编程,与逻辑语句相比较有着更稳定的复杂度。
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)
})
}
上面这段代码相似性很高,我们使用表驱动将事件取出一个哈希表,使逻辑和数据清晰明了的分开后的代码:
events:{
'click #aa1':'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})
}
四,我是如何理解模块化
什么是模块化?为了减少面条式代码,每个部分、接口等彼此之间不知道彼此,互相也不影响,每个部分、接口都有属于自己的特定功能。又减少了代码量,复杂度,减少了资源的依赖。开发者也更容易维护,逻辑也更清晰。这样的代码方式,就是模块化。