该文主要对JSON、MVC、eventBus、表驱动编程、模块化等内容做一些记录。
JSON
JSON的语法在官网讲得很清楚,忘记了或者有所疑问请直接回去查看铁轨图。
需要跟JS作区分的地方在于:
- JSON的数据类型只有六种,而JS有7种(现在是8种了),需要注意区分。
这六种数据类型分别为:
- string(不支持单引号以及无引号,只能使用双引号)
- number(支持科学计数法)
- bool
- null
- object
- array
- JSON不支持函数,也不支持变量,那么当然也不支持引用。
window.JSON
- 将符合JSON语法的字符串转换为JS对应类型的数据,即 JSON字符串=>JS数据。
- 因为JSON只有六种数据类型,所以能转换成的JS数据也只有六种。
- 如果语法有错误,则直接抛出Error对象。
- 一般是用try catch捕获错误,举个例子:
let obj
try{
obj = JSON.parse(`要写的JSON代码`)
}catch(error){
console.log('出错了')
console.log(error)
}
JSON.stringify
- 就是
JSON.parse的逆运算,即 JS数据=>JSON字符串。 - 同样的,因为JS数据类型比JSON多,所以这个运算不一定能成功(错误的JS数据会被忽略)。
- 如果失败,就抛出一个Error对象。
- 同样可以使用try catch捕获错误。
MVC
MVC将代码分为M(数据模型)V(视图)C(控制器)三类对象。
M、V、C 三个对象分别做什么?
M:模型(model)用于封装与程序逻辑相关的数据以及对数据的处理方法,会有一个或多个视图(view)监听此模型。模块中的数据类代码可以放入M中。
const m = {
data:巴拉巴拉,
name:乌拉
}
V:视图(view)是程序在屏幕上的表示,是用户最直观看到的部分,显示的的是模型(model)的当前状态。
const m = {
html:`
<section>
<div class='x'>RUA</div>
</section>
`
}
C:控制器(controller)定义用户界面对用户输入的响应方式,起到不同层面间的组织作用,用于控制程序的流程,它用于处理用户的行为和数据(model)的改变。
const c = {
method:{
用户戳了哪里,做什么
}
}
用户操作界面时,通过C中的响应方式,使得M产生变化,V应当产生响应的更新,显示出新的内容。
EventBus 的作用是什么?有哪些api?
将所有的对象看做一个一个的点,如果想要进行单个或多个点之间的通信,最好的方法是找出一个专门的点负责这些点之间的通信。
这个点就是eventBus,它负责对象与对象(单个或多个)之间的通信。
使用jquery为例:声明的eventBus本身是一个空对象,但其中恰巧包含很多api例如on、off、trigger等,那么这个对象就可以作为其他对象间通信用的对象了。例如在模型中创建了一个方法,这个方法触发时eventBus就会大吼一声。
此时只要另一边监听eventBus这一声,再给出一定的响应,对象间的通信就完成了,唉就好比打了个电话。
什么是表驱动编程?
在写代码的过程中总会遇到“大批代码长得很像,但实际不重复”的情况。
此时,通过眯起眼睛分析这些代码中哪部分才是真正需要的数据,将这些重要数据做成一个哈希表,就可以有效的简化代码(这属于数据结构知识给程序猿的红利)。
对模块化的理解
有时候一个程序需要实现很多很多很多的功能,如果都写到一起,维护起来会非常不便,于是大家将每一个小功能的那部分代码分开写到很多文件中,再进行引用,就能大幅度降低维护和debug所消耗的时间和精力。模块化为最小知识原则奠定了基础,在模块化开发的过程中,所需要的知道的知识会越来越少。
最后是一些其他的记录
-
所有的模块都可以使用MVC来搞定的话,干脆一上来就全这么写,这是一种以不变应万变的思路。不过可能会导致有很多多余的、用不到的代码。
-
事不过三:如果同样的代码出现了三遍,就应该琢磨琢磨,将这个代码抽成一个函数,然后分别调用即可。如果同样的属性出现了三遍,那就应该把它做成共有属性(原型或者类)。同样的原型如果出现了三遍,就应该善用继承。(实际实现起来挺难的,有时候继承的层级太深,吃顿饭回来代码就看不懂了。。。)
-
view=render(data):比起操作dom对象要先获取元素再监听balbala的,使用render可以便捷得多,只要data发生了改变,页面就会重新渲染展示新的view。不过要注意因为每一次render都要重新渲染页面覆盖原内容,所以比起dom操作,性能的浪费是不可避免的。(通过虚拟dom可以解决这个问题) -
写JS,总要做出选择,摆在面前的路有两条:第一条是每一句代码都要加分号,但每一句都加分号并不是每一行都加,会迷惑。。。第二条是都不加分号,但是任何一行都不能以括号开头,因为JS会向上一行合并,从而产生各种bug,也会产生迷惑。所以迷惑于‘加不加分号’或者‘加不加括号’,这是难免的,选择吧。