微信正式发布小程序虽然已经过去一个星期了,但人们讨论小程序的热情似乎丝毫未减。这几天一打开微信公众号,随处可见的是「小程序最全指南」、「如何利用小程序发家致富」之类的文章。确实,互联网圈子就那么大,微信的每一个小动作都能引发一波小高潮。而且产品经理对微信似乎也特别敏感,就连果果的文章,如果在标题里提到微信二字,阅读量也是直接上一个台阶。不信?下回咱做个AB test。
果果当然也不落俗套,跟风写了几篇关于小程序的技术分析文章。分析来分析去,小程序无非就是一个高度定制的H5页面。微信自己弄了一套html标签,称之为wxml,又封装了一些样式规则,叫wxss,不管怎么叫,换汤不换药,里子里还是web前端里html+css+js那一套。封装一方面是为了降低开发成本,根本上是为了收拢控制权限,开发者能用的东西越少,微信需要操心的事情也就越少。当然,这些都不是重点。重点是,如果你想自己搞一个小程序出来,你无论如何都绕不过js这个坎儿。
后台不少同学留言,说他们是如何下决心学习js,又是如何从入门到放弃的。果果听了很是痛心。当年上学那会儿,有两条路摆在果果面前,学js还是学java,果果毫不犹豫的选择了java。理由是,js这么简单,能干啥?现在想想真是图样,正是因为简单,决定了它有群众基础,任凭你java、c++如何如何血统纯正、如何如何多才多艺,最终都是要被淹没在人民群众的汪洋大海中的。
js真的简单吗?
真、简单。
举个例子,js里只有5中简单的数据类型:undefined、null、Boolean、Number和String。前两个不看,它们表示不存在(计算机里,不存在的东西也是一种东西,叫做「不存在的东西」)。后面三个,Boolean可以表示真假、是非、对错、你爱不爱我之类的只有两个值的东西,Number表示数字如1024,String表示一个单词或者一句话。这就完了,大千世界,尽在掌握。作为对比,C语言里,short、char、int、long都能表示一个整数,我的天呐。还有怎么搞都搞不明白的指针,我一度怀疑就是因为这玩意儿才导致我们专业男女比例7比1的。更恶心的是,指针竟然也他妈的可以表示一个整数。
js除了数据简单,语法也简单。语句常用的就两套,if…else,for….。其他的都属于高级语法,装逼用的。函数和C语言里长的一个样,只是前面多了一个前缀叫function。熟练使用即可行走江湖。
js后来又从java那里学来了对象,从对象的定义到对象的创建,都做了简化。常用的就3个,Array、Date和RegExp,分别表示数据的集合,日期以及正则表达式。面向对象的那套东西,继承和封装,js也支持,不过老版本的js实现起来有点绕,现在的ES6标准,已经简化许多了。
掌握了基本类型、基本语法、函数和对象,可以说js就算入门了,加起来不会超过两天。但是,此时你就迫不及待的跑去跟程序员撕,肯定会被鄙视的。他们会非常自信的向你抛出他们面试的时候被折磨惨了的两个概念,原型和闭包,以此劝你知难而退。
什么是原型和闭包?
请自行百度吧,我果某人自认讲不明白。这些东西啊,光背概念是万万不行的,等用到的时候再去查,查明白了你也就懂了。
至此,js语言层面的东西,你应该可以应付了。然后要学的是,各种API。
什么API?js运行在浏览器里,首先当然是浏览器提供的API了。这些API包含了浏览器提供的方方面面的能力,比如窗口的打开关闭、前进后退历史等等。它们大多放在一个叫window的全局对象里。你随便打开一个网页,按F12,在console里输入window,就会知道,这家伙真是大而全。
还有一些API,是用来操作页面的结构的。最简单的例子,没有拉到数据的时候转菊花,拉倒数据之后替换成真正的数据,界面元素的改变,也可以通过js来完成,术语叫DOM操作。
当然,还要学习小程序的API。微信自己提供了很多终端才有的能力,比如传感器、打开文件等等。以前的时候,是通过js bridge来做的,其实是一个道理。如果你想理解小程序的运行过程,有一个概念必须要掌握:「事件」。事件是程序里很常见的一种东西,包括我们,也是生活在充满事件的世界中。如果你对某个事件感兴趣,但它还没有发生,就比如美帝解放朝鲜这一事件,你可以先订阅,等事件触发的时候,让别人给你一个通知,给你一次执行自己代码的机会。小程序里,APP被打开、APP压后台、APP又回来了,都是事件。这样的事件来临的时候,你都有机会、而且是一定要做点什么,不然程序怎么出bug的,你都不知道。
总结js本身是非常简单的。但是,我一直觉得,如果你接触一个新的东西,小到一门语言大到一个行业,从入行到入门,一定要砸够相应时间进去,无论牛人与否,无论效率高低。C++入门需要21天,js嘛,一个星期就够了。你不妨从你那些可以改变世界却只差一个程序员的idea 里,随便挑一个出来,落地成一个小程序,路上有多坑,你走一遍就知道了。