解析 JavaScript Error 中的 stack 信息

需求描述

对于任意的 Error 对象,如果将其输出,我们可以看见这个异常的堆栈信息。例如:

1
2
3
4
5
6
7
8
9
10
Error
at Object.<anonymous> (/Users/lazzzis/Documents/Projects/Test/test.js:10:12)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)

可以看到这个异常来自: test.js 的第 10 行。但现在的需求是要用 代码 捕捉报错的来源文件以及行数。

用 vue 写一个单页的 hexo 主题

2018 年 5 月 5 日更新: 因为我突然发现如果采用单页的话,就很难处理 SEO 的问题,所以我现在已经基本不再考虑在 hexo 的基础上考虑这个主题。所以我现在也已经在使用别的主题。在未来,我会考虑采用 vuepress 或者 peco 搭建我的博客。


大概一年以前,我发布过一个主题,名为 hexo-theme-mls。这个主题是我当时在学完如何写一个 hexo 主题后完成的。后来在学了 vue 之后,构思着再写一个主题。我非常想把它写成一个单页应用,可是一直没有思绪。直到后来看到了 hexo-theme-one,我才有了思绪,于是开始写一个单页的主题。

2017 -> 2018

上一年差不多在这时也写了这么一个年终总结,今年也写一个吧。

HTTP 协议中的 URL

URL 概念

全称 Uniform Resource Locator (统一资源定位符),是一种 URI (Uniform Resource Identifier, 统一资源标识符)

URL 作用

主要用于网络资源的定位。换句话说,当你想告诉 Alice 你的服务器上有一个有趣的文件想要分享时,你就可以告诉这个文件对应的 URL。那么 Alice 就可以根据这个 URL 找到你要分享的文件。而目前 URL 更通俗的被称为网址。

拓扑排序 / topological sort

问题描述: 提供一些以数字为 id 的任务(task),这些任务存在如下图所示的依赖关系:

其中, 1 -> 3 表示任务 3 必须在任务 1 完成之后才能够开始。如上图中,任务 3 必须在任务 1 和任务 4 之后。而任务 4 又必须在任务 2 之后。

而要求就是, 提供一个序列,要求按照这个序列能够顺利完成所有任务。这里假设每个时刻只能处理一个任务,而且一旦开始处理某个任务,那么你不能中止或切换到其它任务。这个答案可能不唯一。在上图中,一个可能的答案就是 [1, 2, 4, 3, 5, 7, 6]

思考为什么要用工厂模式

以 JavaScript 为例子发表一下我对工厂模式 (Factory Pattern) 的看法

为什么不直接 new 呢? 我自己写代码直接 new 自己写的类不就好了么?

这里不得不提一下设计模式的意义。设计模式并不是凭空捏造的,而是长期开发所形成的经验之谈,当然这些经验自然是成功的,被认可的经验,否则设计模式就不会被那么多人认可和推崇了。