Typescript 的 Open Class 和 Mixin

Open Class 和 Mixin(有的语言里面叫 Trait),是 Ruby 的语言特性中我最喜欢的两个。其实几乎所有的动态语言都能支持这两种特性,只不过是否是语法层面上支持的区别而已。对于 JavaScript 这样的语言来说,直接操作 prototype 就完事了,想怎么搞就怎么搞。但这样的问题是语法过于粗糙,不利于语言的静态分析。我们来看看 Ruby 是怎么做的: Ruby Open Class »

IRequest - A class-based request library for Typescript/Javascript (二)IRequest 的设计与实现

首先说一下 IRequest 的设计目的是什么,后面的篇幅都将围绕这个目的来说。(本文所有的代码都是简化过的代码) 让使用者开箱即用,不需要也不应该对定义好的接口做任何的封装。 底层不依赖于具体的网络请求实现,也就是说,可以让任何其他的网络库接入 IRequest 定义的接口。 上一篇文章提到,大多数网络库的接口设计都是 Request.get(url, config) 这种基于函数调用传入 config 的方式。那为什么大家在实际使用的时候都得进行额外的一层封装呢?仔细想想你就会发现,根本原因是这种模式的扩展性不足,无法直接适用于复杂项目或者说需要长期维护的项目。像那些写完就不会再维护的项目, »

IRequest - A class-based request library for Typescript/Javascript (一)现有的模式有什么问题

通常,几乎每一个语言都会有第三方的网络库。因为语言的 stdlib 或系统内置的网络库并不是那么好用。Objective-C 有 AFNetworking, Swift 有 Alamofire, c# 有 RestSharp。那在前端的世界里,第三方的网络库就有更多了,jQuery, request, axios, superAgent, Angular HttpClient。 其实我不太懂前端为什么会有这么多的网络库,Angular Http 为了接入 »

Memory 1

转眼间毕业已经两年有余,生活是需要记录的,不然你就不知道为什么时间会过的这么快。初中,高中的时候,我就一直憧憬着将来大学,工作的生活,觉得在家里读书好无聊啊,天天就学九门功课有什么意思?可是真的到了大学的时候,你会发现大学也没什么意思,一心想着毕业工作。工作了不久后,你会觉得工作也没什么意思,可是接下来要去干什么呢?我不知道。人做事总是只有三分热度。一些事情你现在可能觉得很有意思,但总会厌烦的。与其憧憬着未来的生活,远远不如重视当下,以及记录过去。因此,我现在也要开始补一下过去的回忆,让自己看起来并不像是瞎j8混了大学四年以及工作的两年。不过, »

Block 的递归调用 - How to implement recursive call block?

有的时候我们需要在 Objective-C 方法里定义一个 Block, 并且这个 Block 还会递归调用自己。那有人就会问了,为什么不开一个函数用函数的递归调用呢?因为这个 Block 会引用到许多个 local variable,如果用函数调用的话,所有的值都要传入这个函数,将会非常难看,比如 // 注意,这段代码是错的 - (void)outerFunc { __block NSInteger localVar1 »