编程

继续探索JS中的Iterator,兼谈与Observable的对比

前言

JavaScript 2015中引入了Generator Function(相关内容可以参考前作ES6 generator函数与co一瞥ES6 generator函数与co再一瞥),并且在加入了Symbol.iterator之后,使得构造拥有自定义迭代器的集合变得相当容易(可以参考前作在JavaScript中实现LINQ——一次“失败”的尝试)。

前几天在群里@徐叔提出了这样一个问题:

1
2
3
4
5
function* listen(element) {
element.addEventListener('click', function(e) {
// 这里怎么把e通过外面的listen给yield出去?
})
}

音锤思婷……

我理解,叔叔写listen的目的是为了把事件源抽象成一个“可以被遍历的集合”。

在JavaScript中实现LINQ——一次“失败”的尝试

这篇文章的起因是我在知乎上对JavaScript 函数式编程存在性能问题么?这个问题的回答。其实在这个问题之前挺久我就想做相关的尝试,但懒癌无药医,挖坑如山倒,填坑如抽丝。

废话不多说,走你。

C# 3.0引入了引以为豪的LINQ(Language INtergrated Query),可以用类函数式的方式操作集合(C#中的IEnumerable接口)。

在JS中,数组也有类似的filtermapreduce一类方法,但存在重复遍历问题,利用C#中LINQ的思路,给JS实现一套LINQ是否可行呢?

初窥 ASP.NET Core MVC

最近心血来潮,想搞一下ASP.NET Core,于是准备把练琴记录仪的服务端迁移到ASP.NET Core MVC上,不过遇到些小问题,记录一下。

Cordova中与In App Browser的通讯

为了把我的练琴记录仪改成多用户App,我需要做一个Weibo OAuth功能,因为练琴记录仪是Single Page App,我不愿意直接跳转到OAuth页面,那样会打断我的应用状态,于是我打算打开一个新窗口来完成OAuth。

这样一来,问题自然就转换为跨窗口通讯问题了。

窗口间通讯毫无疑问首选是window.postMessage,在cordova当中,原生window.open是不能用的,官方给的方案是使用cordova-plugin-inappbrowser插件所提供的cordova.InAppBrowser.open(url, target, options)来取代window.open,这两者基本上API差不多一致。

但是IAB插件所返回的对象并不是真正的window,它没有postMessage功能,并且在IAB所打开的页面中,也没有window.opener,于是只能另辟蹊径,找点不靠谱的挫方法来试试了。

使用RxJS做一个Pull-to-Refresh的例子

本文将用一个Pull-to-Refresh的例子来介绍如何使用RxJS进行高度抽象的复杂DOM事件处理。

文中所开发的完整demo代码可以在github找到,在线demo在这里(需要使用手机或开启touch模拟,未作浏览器兼容)。

这个程序将会用到的工具:

  • RxJS
  • VueJS(并非对其依赖,仅仅是为了方便开发一个UI)

使用C#开发桌面hybrid应用程序

周末和基友一起开发了一个程序MP3CutAdgithub),用的是C#做容器和“后端”,webkit做UI。

因为后端的算法是用C#写的,就打算不迁移了,用C#做UI吧。但是我特么不会,距离上一次开发WinForm程序已经过去了5、6年;WPF也没有实践经验。所以就想弄个办法,用C#做后端,web做前端,赶个时髦。

使用JavaScript实现“真·函数式编程”

其实这篇文章有点标题党了,因为函数式编程是一个非常大的课题。而标题里的“真”听起来就有一股浓浓的中二气息。

没错,这篇文章是函数式装逼系列(1)(2)的进阶版。函数式编程是很火的,然而现在网上很多入门级的JS函数式编程教程(甚至书)都太水了,以为用用forEach用用map用用reduce用用immutable就叫函数式编程了。

Too young. Too simple.

本着搞一个大新闻的目的,我又开了这个无底天坑。当然一切都是从学习与娱乐的目的出发(这两件事其实并不冲突嘛),请勿评论本文中代码的实用价值。

瑞迪?黑喂狗!