給產(chǎn)品經(jīng)理講技術(shù):小程序這么火,你不來(lái)學(xué)學(xué)js?
js本身是非常簡(jiǎn)單的。
微信正式發(fā)布小程序雖然已經(jīng)過(guò)去一個(gè)星期了,但人們討論小程序的熱情似乎絲毫未減。這幾天一打開(kāi)微信公眾號(hào),隨處可見(jiàn)的是「小程序最全指南」、「如何利用小程序發(fā)家致富」之類(lèi)的文章。確實(shí),互聯(lián)網(wǎng)圈子就那么大,微信的每一個(gè)小動(dòng)作都能引發(fā)一波小高潮。而且產(chǎn)品經(jīng)理對(duì)微信似乎也特別敏感,就連果果的文章,如果在標(biāo)題里提到微信二字,閱讀量也是直接上一個(gè)臺(tái)階。不信?下回咱做個(gè)AB test。
果果當(dāng)然也不落俗套,跟風(fēng)寫(xiě)了幾篇關(guān)于小程序的技術(shù)分析文章。分析來(lái)分析去,小程序無(wú)非就是一個(gè)高度定制的H5頁(yè)面。微信自己弄了一套html標(biāo)簽,稱(chēng)之為wxml,又封裝了一些樣式規(guī)則,叫wxss,不管怎么叫,換湯不換藥,里子里還是web前端里html+css+js那一套。封裝一方面是為了降低開(kāi)發(fā)成本,根本上是為了收攏控制權(quán)限,開(kāi)發(fā)者能用的東西越少,微信需要操心的事情也就越少。當(dāng)然,這些都不是重點(diǎn)。重點(diǎn)是,如果你想自己搞一個(gè)小程序出來(lái),你無(wú)論如何都繞不過(guò)js這個(gè)坎兒。
后臺(tái)不少同學(xué)留言,說(shuō)他們是如何下決心學(xué)習(xí)js,又是如何從入門(mén)到放棄的。果果聽(tīng)了很是痛心。當(dāng)年上學(xué)那會(huì)兒,有兩條路擺在果果面前,學(xué)js還是學(xué)java,果果毫不猶豫的選擇了java。理由是,js這么簡(jiǎn)單,能干啥?現(xiàn)在想想真是圖樣,正是因?yàn)楹?jiǎn)單,決定了它有群眾基礎(chǔ),任憑你java、c++如何如何血統(tǒng)純正、如何如何多才多藝,最終都是要被淹沒(méi)在人民群眾的汪洋大海中的。
js真的簡(jiǎn)單嗎?
真、簡(jiǎn)單。
舉個(gè)例子,js里只有5中簡(jiǎn)單的數(shù)據(jù)類(lèi)型:undefined、null、Boolean、Number和String。前兩個(gè)不看,它們表示不存在(計(jì)算機(jī)里,不存在的東西也是一種東西,叫做「不存在的東西」)。后面三個(gè),Boolean可以表示真假、是非、對(duì)錯(cuò)、你愛(ài)不愛(ài)我之類(lèi)的只有兩個(gè)值的東西,Number表示數(shù)字如1024,String表示一個(gè)單詞或者一句話。這就完了,大千世界,盡在掌握。作為對(duì)比,C語(yǔ)言里,short、char、int、long都能表示一個(gè)整數(shù),我的天吶。還有怎么搞都搞不明白的指針,我一度懷疑就是因?yàn)檫@玩意兒才導(dǎo)致我們專(zhuān)業(yè)男女比例7比1的。更惡心的是,指針竟然也他媽的可以表示一個(gè)整數(shù)。
js除了數(shù)據(jù)簡(jiǎn)單,語(yǔ)法也簡(jiǎn)單。語(yǔ)句常用的就兩套,if…else,for….。其他的都屬于高級(jí)語(yǔ)法,裝逼用的。函數(shù)和C語(yǔ)言里長(zhǎng)的一個(gè)樣,只是前面多了一個(gè)前綴叫function。熟練使用即可行走江湖。
js后來(lái)又從java那里學(xué)來(lái)了對(duì)象,從對(duì)象的定義到對(duì)象的創(chuàng)建,都做了簡(jiǎn)化。常用的就3個(gè),Array、Date和RegExp,分別表示數(shù)據(jù)的集合,日期以及正則表達(dá)式。面向?qū)ο蟮哪翘讝|西,繼承和封裝,js也支持,不過(guò)老版本的js實(shí)現(xiàn)起來(lái)有點(diǎn)繞,現(xiàn)在的ES6標(biāo)準(zhǔn),已經(jīng)簡(jiǎn)化許多了。
掌握了基本類(lèi)型、基本語(yǔ)法、函數(shù)和對(duì)象,可以說(shuō)js就算入門(mén)了,加起來(lái)不會(huì)超過(guò)兩天。但是,此時(shí)你就迫不及待的跑去跟程序員撕,肯定會(huì)被鄙視的。他們會(huì)非常自信的向你拋出他們面試的時(shí)候被折磨慘了的兩個(gè)概念,原型和閉包,以此勸你知難而退。
什么是原型和閉包?
請(qǐng)自行百度吧,我果某人自認(rèn)講不明白。這些東西啊,光背概念是萬(wàn)萬(wàn)不行的,等用到的時(shí)候再去查,查明白了你也就懂了。
至此,js語(yǔ)言層面的東西,你應(yīng)該可以應(yīng)付了。然后要學(xué)的是,各種API。
什么API?js運(yùn)行在瀏覽器里,首先當(dāng)然是瀏覽器提供的API了。這些API包含了瀏覽器提供的方方面面的能力,比如窗口的打開(kāi)關(guān)閉、前進(jìn)后退歷史等等。它們大多放在一個(gè)叫window的全局對(duì)象里。你隨便打開(kāi)一個(gè)網(wǎng)頁(yè),按F12,在console里輸入window,就會(huì)知道,這家伙真是大而全。
還有一些API,是用來(lái)操作頁(yè)面的結(jié)構(gòu)的。最簡(jiǎn)單的例子,沒(méi)有拉到數(shù)據(jù)的時(shí)候轉(zhuǎn)菊花,拉倒數(shù)據(jù)之后替換成真正的數(shù)據(jù),界面元素的改變,也可以通過(guò)js來(lái)完成,術(shù)語(yǔ)叫DOM操作。
當(dāng)然,還要學(xué)習(xí)小程序的API。微信自己提供了很多終端才有的能力,比如傳感器、打開(kāi)文件等等。以前的時(shí)候,是通過(guò)js bridge來(lái)做的,其實(shí)是一個(gè)道理。如果你想理解小程序的運(yùn)行過(guò)程,有一個(gè)概念必須要掌握:「事件」。事件是程序里很常見(jiàn)的一種東西,包括我們,也是生活在充滿事件的世界中。如果你對(duì)某個(gè)事件感興趣,但它還沒(méi)有發(fā)生,就比如美帝解放朝鮮這一事件,你可以先訂閱,等事件觸發(fā)的時(shí)候,讓別人給你一個(gè)通知,給你一次執(zhí)行自己代碼的機(jī)會(huì)。小程序里,APP被打開(kāi)、APP壓后臺(tái)、APP又回來(lái)了,都是事件。這樣的事件來(lái)臨的時(shí)候,你都有機(jī)會(huì)、而且是一定要做點(diǎn)什么,不然程序怎么出bug的,你都不知道。
總結(jié)
js本身是非常簡(jiǎn)單的。但是,我一直覺(jué)得,如果你接觸一個(gè)新的東西,小到一門(mén)語(yǔ)言大到一個(gè)行業(yè),從入行到入門(mén),一定要砸夠相應(yīng)時(shí)間進(jìn)去,無(wú)論牛人與否,無(wú)論效率高低。C++入門(mén)需要21天,js嘛,一個(gè)星期就夠了。你不妨從你那些可以改變世界卻只差一個(gè)程序員的idea 里,隨便挑一個(gè)出來(lái),落地成一個(gè)小程序,路上有多坑,你走一遍就知道了。
#專(zhuān)欄作家#
給產(chǎn)品經(jīng)理講技術(shù),微信公眾號(hào)(pm_teacher),人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家。資深程序猿,專(zhuān)注客戶端開(kāi)發(fā)若干年,對(duì)前端、后臺(tái)技術(shù)略懂,熱衷于對(duì)新的科技領(lǐng)域的探索。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
這是教人學(xué)習(xí)JS的吧~
之前做h5用過(guò)js,現(xiàn)在做產(chǎn)品了