Browse Source

chore: modify typos

miaoyuxinbaby 7 years ago
parent
commit
dfd2ab53b6

+ 8 - 8
docs/appendix/core-util.md

@@ -55,7 +55,7 @@ const classify = str => str
   .replace(/[-_]/g, '')
 ```
 
-其中 `hasConsole` 用来检测宿主环境的 `console` 是否可用,`classifyRE` 是一个正则表达式:`/(?:^|[-_])(\w)/g`,用于 `classify` 函数,`classify` 函数的作用是将一个字符串的首字母以及中横线转为驼峰,代码很简单相信大家都能看得懂,`classify` 的使用如下:
+其中 `hasConsole` 用来检测宿主环境的 `console` 是否可用,`classifyRE` 是一个正则表达式:`/(?:^|[-_])(\w)/g`,用于 `classify` 函数,`classify` 函数的作用是将一个字符串的首字母以及中横线转为驼峰,代码很简单相信大家都能看得懂,`classify` 的使用如下:
 
 ```js
 console.log(classify('aaa-bbb-ccc')) // AaaBbbCcc
@@ -317,7 +317,7 @@ function logError (err, vm, info) {
 
 可以看到,在非生产环境下,先使用 `warn` 函数报一个警告,然后判断是否在浏览器或者Weex环境且 `console` 是否可用,如果可用则使用 `console.error` 打印错误,没有则直接 `throw err`。
 
-所以 `logError` 才真正打印错误的函数,且实现也比较简单。这其实已经达到了 `handleError` 的目的了,但是大家注意我们此时忽略了一段代码,就是 `handleError` 函数开头的一段代码:
+所以 `logError` 才真正打印错误的函数,且实现也比较简单。这其实已经达到了 `handleError` 的目的了,但是大家注意我们此时忽略了一段代码,就是 `handleError` 函数开头的一段代码:
 
 ```js
 if (vm) {
@@ -409,7 +409,7 @@ if (vm) {
 while ((cur = cur.$parent))
 ```
 
-这是一个链表遍历嘛,逐层寻找父级组件,如果父级组件使用了 `errorCaptured` 选项,则调用之,就怎么简单。当然啦,作为生命周期钩子,`errorCaptured` 选项在内部以一个数组的形式存在的,所以需要 `for` 循环遍历,另外钩子执行的语句是被包裹在 `try catch` 语句块中的。
+这是一个链表遍历嘛,逐层寻找父级组件,如果父级组件使用了 `errorCaptured` 选项,则调用之,就怎么简单。当然啦,作为生命周期钩子,`errorCaptured` 选项在内部以一个数组的形式存在的,所以需要 `for` 循环遍历,另外钩子执行的语句是被包裹在 `try catch` 语句块中的。
 
 这里有两点需要注意:
 
@@ -420,7 +420,7 @@ while ((cur = cur.$parent))
 if (capture) return
 ```
 
-其中 `capture` 是钩子调用的返回值与 `false` 全等比较的结果,也就是说,如果 `errorCaptured` 钩子函数返回假,那么 `capture` 为真直接 `return`,程序不会走 `if` 语句块后面的 `globalHandleError`,否则除了 `errorCaptured` 被调用外,`if` 语句块后面的 `globalHandleError` 也会被调用。最要的是:如果 `errorCaptured` 钩子函数返回假将阻止错误继续向“上级”传递。
+其中 `capture` 是钩子调用的返回值与 `false` 全等比较的结果,也就是说,如果 `errorCaptured` 钩子函数返回假,那么 `capture` 为真直接 `return`,程序不会走 `if` 语句块后面的 `globalHandleError`,否则除了 `errorCaptured` 被调用外,`if` 语句块后面的 `globalHandleError` 也会被调用。最要的是:如果 `errorCaptured` 钩子函数返回假将阻止错误继续向“上级”传递。
 
 ## lang.js 文件代码说明
 
@@ -438,7 +438,7 @@ export function isReserved (str: string): boolean {
 }
 ```
 
-* 描述:`isReserved` 函数用来检测一个字符串是否以 `$` 或者 `_` 开头,主要用来判断一个字段的键名是否保留的,比如在 `Vue` 中不允许使用以 `$` 或 `_` 开头的字符串作为 `data` 数据的字段名,如:
+* 描述:`isReserved` 函数用来检测一个字符串是否以 `$` 或者 `_` 开头,主要用来判断一个字段的键名是否保留的,比如在 `Vue` 中不允许使用以 `$` 或 `_` 开头的字符串作为 `data` 数据的字段名,如:
 
 ```js
 new Vue({
@@ -451,7 +451,7 @@ new Vue({
 
 * 源码分析:
 
-判断一个字符串是否以 `$` 或 `_` 开头还是比较容易的,只不过 `isReserved` 函数的实现方式是通过字符串的 `charCodeAt` 方法获得该字符串第一个字符的 `unicode`,然后与 `0x24` 和 `0x5F` 作比较。其中 `$` 对应的 `unicode` 码为 `36`,对应的十六进制值为 `0x24`;`_` 对应的 `unicode` 码为 `95`,对应的十六进制值为 `0x5F`。有的同学可能会有疑问为什么不直接用字符 `$` 和 `_` 作比较,而是用这两个字符对应的 `unicode` 码作比较,其实无论哪种比较方法差别不大,看作者更倾向于哪一种。
+判断一个字符串是否以 `$` 或 `_` 开头还是比较容易的,只不过 `isReserved` 函数的实现方式是通过字符串的 `charCodeAt` 方法获得该字符串第一个字符的 `unicode`,然后与 `0x24` 和 `0x5F` 作比较。其中 `$` 对应的 `unicode` 码为 `36`,对应的十六进制值为 `0x24`;`_` 对应的 `unicode` 码为 `95`,对应的十六进制值为 `0x5F`。有的同学可能会有疑问为什么不直接用字符 `$` 和 `_` 作比较,而是用这两个字符对应的 `unicode` 码作比较,其实无论哪种比较方法差别不大,看作者更倾向于哪一种。
 
 ### def
 
@@ -483,7 +483,7 @@ export function def (obj: Object, key: string, val: any, enumerable?: boolean) {
 
 ## options.js 文件代码说明
 
-*该文件的讲解集中在 [Vue选项的规范化](../art/4vue-normalize.md) 以及 [Vue选项的合并](../art/5vue-merge.md) 这两个小节中*
+* 该文件的讲解集中在 [Vue选项的规范化](../art/4vue-normalize.md) 以及 [Vue选项的合并](../art/5vue-merge.md) 这两个小节中。
 
 ## perf.js 文件代码说明
 
@@ -526,7 +526,7 @@ if (process.env.NODE_ENV !== 'production') {
 const perf = inBrowser && window.performance
 ```
 
-如果在浏览器环境,那么 `perf` 的值就是 `window.performance`,否则为 `false`,然后做了一列判断,目的是确定 `performance` 的接口可用,如果都可用,那么将初始化 `mark` 和 `measure` 变量。
+如果在浏览器环境,那么 `perf` 的值就是 `window.performance`,否则为 `false`,然后做了一列判断,目的是确定 `performance` 的接口可用,如果都可用,那么将初始化 `mark` 和 `measure` 变量。
 
 首先看 `mark`:
 

+ 7 - 7
docs/appendix/shared-util.md

@@ -10,7 +10,7 @@ export const emptyObject = Object.freeze({})
 
 * 描述:创建一个空的冻结对象 `emptyObject`,这意味着 `emptyObject` 是不可扩展、不可配置、不可写的。
 
-* 源码分析:通过以空 `json` 对象 `{}` 为参数调用 `Object.freeze` 函数实现。
+* 源码分析:通过以字面量形式创建的空对象 `{}` 为参数调用 `Object.freeze` 函数实现。
 
 ## isUndef
 
@@ -103,7 +103,7 @@ export function isObject (obj: mixed): boolean %checks {
 }
 ```
 
-* 描述:当值为 JSON-compliant 类型时,用于区分对象和原始值,返回 `boolean` 值。
+* 描述:当值为 `JSON-compliant` 类型时,用于区分对象和原始值,返回 `boolean` 值。
 
 * 参数:
   * `{mixed} obj` 混合类型
@@ -419,7 +419,7 @@ export function cached<F: Function> (fn: F): F {
 const cache = Object.create(null)
 ```
 
-随即便返回一个函数:
+随返回一个函数:
 
 ```js
 return (function cachedFn (str: string) {
@@ -532,14 +532,14 @@ export function toArray (list: any, start?: number): Array<any> {
 }
 ```
 
-* 描述:将类数组对象转换为数组。
+* 描述:将类数组对象转换为数组。
 
 * 参数:
   * `{any} list` 类数组list
   * `{number} start` 开始转换索引
 
 * 源码分析:
-`toArray` 接2个参数,分别为类数组 `list` 和开始转换索引 `start`(默认从0开始)。通过`new Array()` 创建长度为 `i` 的新数组,`while` 循环对 `ret` 每一项赋值,最后返回转换后的新数组 `ret`。
+`toArray` 接2个参数,分别为类数组 `list` 和开始转换索引 `start`(默认从0开始)。通过`new Array()` 创建长度为 `i` 的新数组,`while` 循环对 `ret` 每一项赋值,最后返回转换后的新数组 `ret`。
 
 ## extend
 
@@ -820,11 +820,11 @@ export function once (fn: Function): Function {
 
 * 源码分析:
 
-`once` 函数以 `fn` 作为参数并返回一个新函数。`called` 作为一个回调标识符,仅当值为false 时调用
+`once` 函数以 `fn` 作为参数并返回一个新函数。`called` 作为一个回调标识符,仅当值为 `false` 时调用
 ```js
 if (!called) {
   called = true
   fn.apply(this, arguments)
 }
 ```
-且将 `called` 值修改为 true。再次调用将不再执行。
+且将 `called` 值修改为 `true`。再次调用将不再执行。

+ 1 - 1
docs/appendix/vue-ins.md

@@ -1,6 +1,6 @@
 # Vue 实例的设计
 
-这里是对 `Vue` 实例的整理,利于我们直观的观察 `Vue`
+这里是对 `Vue` 实例的整理,有利于我们直观地观察 `Vue`
 
 ```js
 // Vue.prototype._init

+ 11 - 11
docs/appendix/web-util.md

@@ -35,9 +35,9 @@ export function query (el: string | Element): Element {
 
 * 源码分析:
 
-如果参数是字符串,那么将该字符串作为 `css` 选择符并使用 `document.querySelector()` 函数查询元素,如果查找到该元素则返回该元素,否则在非生产环境下打印警告信息并返回一个新创建的 `div`。
+如果参数是字符串,那么将该字符串作为 `css` 选择符并使用 `document.querySelector()` 函数查询元素,如果查找到该元素则返回该元素,否则在非生产环境下打印警告信息并返回一个新创建的 `div`。
 
-如果参数不是一个字符串,则原封不动返回参数。
+如果参数不是一个字符串,则原封不动返回参数。
 
 ## attrs.js 文件
 
@@ -84,7 +84,7 @@ el.innerHTML  // 这里的 el.innerHTML 属性就是元素对象的属性
     * `{String} type` 标签的 `type` 属性,多用于如 `<input type="button"/>`
     * `{String} attr` 属性名
 
-* 返回值:如果给定的属性 `attr` 在标签 `tag` 中要使用元素对象原生的 `prop` 进行绑定,那么就返回 `true`,否则 `false`。
+* 返回值:如果给定的属性 `attr` 在标签 `tag` 中要使用元素对象原生的 `prop` 进行绑定,那么就返回 `true`,否则返回 `false`。
 
 * 源码分析:
 
@@ -105,7 +105,7 @@ return (
 )
 ```
 
-总结为:属于以下几种情况之一的,应该使用元素对象的原生 `prop` 绑定:
+总结为:属于以下几种情况之一的,应该使用元素对象的原生 `prop` 绑定:
 
 * `input,textarea,option,select,progress` 这些标签的 `value` 属性都应该使用元素对象的原生的 `prop` 绑定(除了 `type === 'button'` 之外)
 * `option` 标签的 `selected` 属性应该使用元素对象的原生的 `prop` 绑定
@@ -136,7 +136,7 @@ export const shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false
 export const shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false
 ```
 
-该文件主要导出两个变量,分别是 `shouldDecodeNewlines` 和 `shouldDecodeNewlinesForHref`,这两个变量都是布尔值,那么这两个变量是干嘛的呢?我们看一个例子就知道了,假设我们有如下 DOM:
+该文件主要导出两个变量,分别是 `shouldDecodeNewlines` 和 `shouldDecodeNewlinesForHref`,这两个变量都是布尔值,那么这两个变量是干嘛的呢?我们看一个例子就知道了,假设我们有如下 `DOM`
 
 ```html
 <div id="link-box">
@@ -148,7 +148,7 @@ export const shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : f
 </div>
 ```
 
-上面的 DOM 看上去貌似没有什么奇特地方,关键点在于 `<a>` 标签的 `href` 属性,我们在第一个 `<a>` 标签的 `href` 属性值后面添加了换行符,在第二个 `<a>` 标签的 `href` 属性值后面添加了制表符。那么这么做会有什么影响呢?执行下面的代码就显而易见了:
+上面的 `DOM` 看上去貌似没有什么奇特地方,关键点在于 `<a>` 标签的 `href` 属性,我们在第一个 `<a>` 标签的 `href` 属性值后面添加了换行符,在第二个 `<a>` 标签的 `href` 属性值后面添加了制表符。那么这么做会有什么影响呢?执行下面的代码就显而易见了:
 
 ```js
 console.log(document.getElementById('link-box').innerHTML)
@@ -177,7 +177,7 @@ function getShouldDecode (href: boolean): boolean {
 * 2、设置这个 `div` 的 `innerHTML` 为 `<a href="\n"/>` 或者 `<div a="\n"/>`
 * 3、获取该 `div` 的 `innerHTML` 并检测换行符是否被编码
 
-`getShouldDecode` 接一个布尔值参数 `href`,如果该参数为 `true` 意味着要监测的是 `a` 标签的 `href` 属性,否则检测任意属性。
+`getShouldDecode` 接一个布尔值参数 `href`,如果该参数为 `true` 意味着要监测的是 `a` 标签的 `href` 属性,否则检测任意属性。
 
 有了上面的函数再实现 `shouldDecodeNewlines` 和 `shouldDecodeNewlinesForHref` 这两个变量就容易多了:
 
@@ -188,7 +188,7 @@ export const shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : f
 
 最终如果 `shouldDecodeNewlines` 为 `true`,意味着 `Vue` 在编译模板的时候,要对属性值中的换行符或制表符做兼容处理。而 `shouldDecodeNewlinesForHref` 为 `true` 意味着 `Vue` 在编译模板的时候,要对 `a` 标签的 `href` 属性值中的换行符或制表符做兼容处理。当然,一切都是以在浏览器中为前提的,因为上面的代码中存在一个 `inBrowser` 的判断。
 
-最后再啰嗦一句,为什么只在浏览器中才需要判断是否需要做此兼容处理呢?那是因为,只有完整版(包括编译器)的 `Vue`才会遇到这个问题,因为只有完整版的 `Vue` 才会在浏览器中对模板行编译,才有可能在获取模板的时候使用 `innerHTML` 获取模板内容。
+最后再啰嗦一句,为什么只在浏览器中才需要判断是否需要做此兼容处理呢?那是因为,只有完整版(包括编译器)的 `Vue`才会遇到这个问题,因为只有完整版的 `Vue` 才会在浏览器中对模板行编译,才有可能在获取模板的时候使用 `innerHTML` 获取模板内容。
 
 ## element.js 文件
 
@@ -216,7 +216,7 @@ export const isHTMLTag = makeMap(
 
 * 源码分析
 
-`isHTMLTag` 是一个使用 `makeMap` 生成的函数,可以在 [shared/util.js 文件工具方法全解](../shared-util) 中查看 `makeMap` 方法。
+`isHTMLTag` 是一个使用 `makeMap` 生成的函数,可以在 [shared/util.js 文件工具方法全解](./shared-util) 中查看 `makeMap` 方法。
 
 ### isSVG
 
@@ -237,7 +237,7 @@ export const isSVG = makeMap(
 
 * 源码分析
 
-`isSVG` 是一个使用 `makeMap` 生成的函数,可以在 [shared/util.js 文件工具方法全解](../shared-util) 中查看 `makeMap` 方法。
+`isSVG` 是一个使用 `makeMap` 生成的函数,可以在 [shared/util.js 文件工具方法全解](./shared-util) 中查看 `makeMap` 方法。
 
 ### isPreTag
 
@@ -273,7 +273,7 @@ export const isReservedTag = (tag: string): ?boolean => {
 isHTMLTag(tag) || isSVG(tag)
 ```
 
-判断一个标签是否是保留标签,我们可以知道,如果一个标签是 `html` 标签,或者是 `svg` 标签,那么这个标签即使保留标签。
+判断一个标签是否是保留标签,我们可以知道,如果一个标签是 `html` 标签,或者是 `svg` 标签,那么这个标签即保留标签。
 
 ### getTagNamespace
 

+ 0 - 9
docs/art/1start-learn.md

@@ -126,12 +126,3 @@
 观察其中 `dev` 系列的命令,其作用如同注释中所写的一样。
 
 另外说明一点:*这套源码分析的文章,大多数时候是基于 dev 脚本的(即:`npm run dev`),也就是完整版的 umd 模块的 Vue*。原因是方便我们直接引用并使用,且完整版带了 `Compiler` 我们就不用单独去分析了。
-
-
-
-
-
-
-
-
-

+ 7 - 38
docs/art/2vue-constructor.md

@@ -568,9 +568,9 @@ Vue.filter
 
 ## Vue 平台化的包装
 
-现在,在我们弄清 `Vue` 构造函数的过程中已经看了两个主要的文件,分别是:`core/instance/index.js` 文件以及 `core/index.js` 文件,前者是 `Vue` 构造函数的定义文件,我们一直都叫其 `Vue` 的出生文件,主要作用是定义 `Vue` 构造函数,并对其原型添加属性和方法,即实例属性和实例方法。后者的主要作用是,为 `Vue` 添加全局的API,也就是静态的方法和属性。这两个文件有个共同点,就是它们都在 `core` 目录下,我们在介绍 `Vue` 项目目录结构的时候说过:`core` 目录存放的是平台无关的代码,所以无论是 `core/instance/index.js` 文件还是 `core/index.js` 文件,它们都在包装核心的 `Vue`,且这些包装是平台无关的。但是,`Vue` 是一个 `Multi-platform` 的项目(web和weex),不同平台可能会内置不同的组件、指令,或者一些平台特有的功能等等,那么这就需要对 `Vue` 根据不同的平台进行平台化包装,这就是接下来我们要看的文件,这个文件也出现在我们寻找 `Vue` 构造函数的路线上,就是:`platforms/web/runtime/index.js` 文件。
+现在,在我们弄清 `Vue` 构造函数的过程中已经看了两个主要的文件,分别是:`core/instance/index.js` 文件以及 `core/index.js` 文件,前者是 `Vue` 构造函数的定义文件,我们一直都叫其 `Vue` 的出生文件,主要作用是定义 `Vue` 构造函数,并对其原型添加属性和方法,即实例属性和实例方法。后者的主要作用是,为 `Vue` 添加全局的API,也就是静态的方法和属性。这两个文件有个共同点,就是它们都在 `core` 目录下,我们在介绍 `Vue` 项目目录结构的时候说过:`core` 目录存放的是平台无关的代码,所以无论是 `core/instance/index.js` 文件还是 `core/index.js` 文件,它们都在包装核心的 `Vue`,且这些包装是平台无关的。但是,`Vue` 是一个 `Multi-platform` 的项目(web和weex),不同平台可能会内置不同的组件、指令,或者一些平台特有的功能等等,那么这就需要对 `Vue` 根据不同的平台进行平台化包装,这就是接下来我们要看的文件,这个文件也出现在我们寻找 `Vue` 构造函数的路线上,就是:`platforms/web/runtime/index.js` 文件。
 
-在看这个文件之前,大家可以先打开 `platforms` 目录,可以发现有两个子目录 `web` 和 `weex`。这两个子目录的作用就是分别为相应的平台对核心的 `Vue` 进行包装的。而我们所要研究的 web 平台,就在 `web` 这个目录里。
+在看这个文件之前,大家可以先打开 `platforms` 目录,可以发现有两个子目录 `web` 和 `weex`。这两个子目录的作用就是分别为相应的平台对核心的 `Vue` 进行包装的。而我们所要研究的 `web` 平台,就在 `web` 这个目录里。
 
 接下来,我们就打开 `platforms/web/runtime/index.js` 文件,看一看里面的代码,这个文件的一开始,是一大堆 `import` 语句,其中就包括从 `core/index.js` 文件导入 `Vue` 的那句。
 
@@ -608,11 +608,11 @@ Vue.config = {
 }
 ```
 
-我们可以看到,从 `core/config.js` 文件导出的 `config` 对象,大部分都是初始化了一个初始值,并且我们在 `core/config.js` 文件中能看到很多这样的注释,如下图:
+我们可以看到,从 `core/config.js` 文件导出的 `config` 对象,大部分属性都是初始化了一个初始值,并且我们在 `core/config.js` 文件中能看到很多这样的注释,如下图:
 
 ![](http://ovjvjtt4l.bkt.clouddn.com/2017-09-06-090635.jpg)
 
-`This is platform-dependent and may be overwritten.`,这句话的意思是,这个配置的是与平台有关的,很可能被覆盖掉。这个时候我们在回看这段代码:
+`This is platform-dependent and may be overwritten.`,这句话的意思是,这个配置是与平台有关的,很可能会被覆盖掉。这个时候我们再回来看这段代码:
 
 ```js
 // install platform specific utils
@@ -765,7 +765,7 @@ Vue.prototype.$mount = function (
 
 再往下的一段代码是 `vue-devtools` 的全局钩子,它被包裹在 `setTimeout` 中,最后导出了 `Vue`。
 
-现在我们就看完了 `platforms/web/runtime/index.js` 文件,该文件的作用是对 `Vue` 进行平台化包装:
+现在我们就看完了 `platforms/web/runtime/index.js` 文件,该文件的作用是对 `Vue` 进行平台化包装:
 
 * 设置平台化的 `Vue.config`。
 * 在 `Vue.options` 上混合了两个指令(`directives`),分别是 `model` 和 `show`。
@@ -784,7 +784,7 @@ import Vue from './runtime/index'
 export default Vue
 ```
 
-可以发现,`运行时` 的入口文件,导出的 `Vue` 就到 `./runtime/index.js` 文件为止。然而我们所选择的并不仅仅是运行时,而是完整版的 `Vue`,入口文件是 `entry-runtime-with-compiler.js`,我们知道完整版和运行时版的区别就在于 `compiler`,所以其实在我们看这个文件的代码之前也能够知道这个文件的作用:*就是在运行时的基础上添加 `compiler`*,对没错,这个文件就是干这个的,接下来我们就看看它是怎么做的,打开 `entry-runtime-with-compiler.js` 文件:
+可以发现,`运行时` 的入口文件,导出的 `Vue` 就到 `./runtime/index.js` 文件为止。然而我们所选择的并不仅仅是运行时,而是完整版的 `Vue`,入口文件是 `entry-runtime-with-compiler.js`,我们知道完整版和运行时版的区别就在于 `compiler`,所以其实在我们看这个文件的代码之前也能够知道这个文件的作用:*就是在运行时的基础上添加 `compiler`*,对没错,这个文件就是干这个的,接下来我们就看看它是怎么做的,打开 `entry-runtime-with-compiler.js` 文件:
 
 ```js
 // ... 其他 import 语句
@@ -837,41 +837,10 @@ export default Vue
 
 然后定义了一个函数 `idToTemplate`,这个函数的作用是:获取拥有指定 `id` 属性的元素的 `innerHTML`。
 
-之后缓存了运行时Vue的 `Vue.prototype.$mount` 方法,并且进行了重写。
+之后缓存了运行时版 `Vue` 的 `Vue.prototype.$mount` 方法,并且进行了重写。
 
 接下来又定义了 `getOuterHTML` 函数,用来获取一个元素的 `outerHTML`。
 
 这个文件运行下来,对 `Vue` 的影响有两个,第一个影响是它重写了 `Vue.prototype.$mount` 方法;第二个影响是添加了 `Vue.compile` 全局API,目前我们只需要获取这些信息就足够了,我们把这些影响同样更新到 `附录` 对应的文件中,也都可以查看的到。
 
 到这里,`Vue` 神秘面具下真实的样子基本已经展现出来了。现在深呼吸,继续我们的探索吧!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 5 - 9
docs/art/3vue-example.md

@@ -2,7 +2,7 @@
 
 在上一节 [Vue构造函数](./2vue-constructor.md) 中,我们整理了完整的 `Vue` 构造函数,包括原型的设计和全局API的设计,并且我们专门为其整理了附录,目的是便于查看相应的方法和属性是在哪里被添加的,同时也让我们对 `Vue` 构造函数有一个大局观的认识。
 
-从这一章节开始,我们将逐渐走进 `Vue`,我们采用一种由浅入深,由宽到窄的思路,一开始我们会从宏观来看 `Vue` 是如何设计的,然后再一点点“追究”进去,进而逐步搞清楚 `Vue` 为什么这么设计。
+从这一章节开始,我们将逐渐走进 `Vue`,我们采用一种由浅入深,由宽到窄的思路,一开始我们会从宏观的角度来看 `Vue` 是如何设计的,然后再一点点“追究”进去,进而逐步搞清楚 `Vue` 为什么这么设计。
 
 而这一节,我们就致力于搞清楚:`Vue的思路`。我们将会从一个例子开始,这个例子非常简单,如下:
 
@@ -23,7 +23,7 @@ var vm = new Vue({
 })
 ```
 
-这段 `js` 代码很简单,只是简单调用了 `Vue`,传递了两个选项 `el` 以及 `data`。这段代码的最终效果就是在页面中渲染为如下 DOM:
+这段 `js` 代码很简单,只是简单调用了 `Vue`,传递了两个选项 `el` 以及 `data`。这段代码的最终效果就是在页面中渲染为如下 `DOM`
 
 ```html
 <div id="app">1</div>
@@ -41,15 +41,15 @@ vm.$data.test = 2
 vm.test = 2
 ```
 
-那么页面的 DOM 也会随之变化为:
+那么页面的 `DOM` 也会随之变化为:
 
 ```html
 <div id="app">2</div>
 ```
 
-看上去这个例子很简单(好吧,确实很简单),但其实这么简单的例子足够我们搞清楚 `Vue` 的思路了,当你明白 `Vue` 的思路之后,再去搞清楚其他的问题将会变得异常轻松。接下来我们就看看上面的例子中,到底发生了什么。
+看上去这个例子很简单(好吧,确实很简单),但其实这么简单的例子已经足够我们搞清楚 `Vue` 的思路了,当你明白 `Vue` 的思路之后,再去搞清楚其他的问题将会变得异常轻松。接下来我们就看看上面的例子中,到底发生了什么。
 
-首先我们要找到当我们调用 `Vue` 构造函数的时候,第一句执行的代码是什么,所以我们要找到 `Vue` 的构造函数,还记 `Vue` 的构造函数定义在哪里吗?不记得没关系,只要查阅一下 [附录/Vue构造函数整理-原型](../appendix/vue-prototype.md) 就ok了,`Vue` 的构造函数定义在 `core/instance/index.js` 文件中,我们找到它:
+首先我们要找到当我们调用 `Vue` 构造函数的时候,第一句执行的代码是什么,所以我们要找到 `Vue` 的构造函数,还记 `Vue` 的构造函数定义在哪里吗?不记得没关系,只要查阅一下 [附录/Vue构造函数整理-原型](../appendix/vue-prototype.md) 就ok了,`Vue` 的构造函数定义在 `core/instance/index.js` 文件中,我们找到它:
 
 ```js
 function Vue (options) {
@@ -217,7 +217,3 @@ callHook(vm, 'created')
 ```
 
 而这些方法才是真正起作用的一些初始化方法,大家可以找到这些方法看一看,在这些初始化方法中,无一例外的都使用到了实例的 `$options` 属性,即 `vm.$options`。所以 `$options` 这个属性的的确确是用于 `Vue` 实例初始化的,只不过在初始化之前,我们需要一些手段来产生 `$options` 属性,而这就是 `mergeOptions` 函数的作用,接下来我们就来看看 `mergeOptions` 都做了些什么,又有什么意义。
-
-
-
-