“Prototype”機制是個半成品OOP,有些文章說這玩意當初為了“簡單(編寫)、容易(學習)”而發明的,但web前端技術發展到今天我們看到,JS顯然是需要OOP的,或者說web前端程式規模增長,需要OOP等更強大、方便的特性、機制。真要簡單容易,你乾脆不要提供能讓人實現繼承的什麼prototyp ...
“Prototype”機制是個半成品OOP,有些文章說這玩意當初為了“簡單(編寫)、容易(學習)”而發明的,但web前端技術發展到今天我們看到,JS顯然是需要OOP的,或者說web前端程式規模增長,需要OOP等更強大、方便的特性、機制。真要簡單容易,你乾脆不要提供能讓人實現繼承的什麼prototype嘛。提供了結果呢,繼承要額外手寫代碼實現,而且聽說繼承機制竟有五種之多,這不是反而難學、混亂、麻煩嗎。
所以JS的prototype一是倉促懶惰二是沒有前瞻性。沒前瞻性說明白點,就是沒有發展意識與戰略眼光:在前端需求開始發展時就應該做出質的革新,網景(Netscape,後來變成FireFox基金會)不去好好做種前端語言,從技術上打倒微軟,卻勞民傷財的去跟人家打官司,格調不高雅,做事更不高明。
沒有代碼提示,主要導致生產率極其底下。沒有代碼提示是因為變數定義沒有類型,而且沒有類型限定之類的機制、語法來彌補。
沒有包。凡是沒有包的高層語言都是垃圾。
此處高層語言是指不直接操作硬體的語言,使用嵌入硬體語言技術不算。比如像jQuery,拿個“$”當包使,這像編程嗎?什麼玩意啊簡直是!
最後導致二十多年後微軟做TS,谷歌做Dart來擦屁股(谷歌還做了V8執行引擎),蔚為奇觀。現在是2016年11月,這兩種語言都發佈幾年了,且不說技術上的便捷程度如何,可中國招聘網站上竟然都還幾乎沒有這兩種語言的職位!
就算用了還是要學新技術,增加成本。
就算用TS或Dart寫了類,JS裡面去調用還是不會有代碼提示!垃圾就是垃圾。
重覆造輪子,導致程式員換庫麻煩。
那些寫框架重覆造輪子的人既是這場災難的傳播者也是受害者。
重覆載入、浪費網路帶寬、資源。
另外載入還得耗電耗時,導致攜帶型設備使用時間縮短。
耗時導致浪費人時間、工作效率下降、與網路擁堵互相加劇。
再強調一句:這些輪子大部分代碼功能都一樣。
到現在甚至js庫都開始用管理器了!比如node.js搞的什麼軟體包管理器npm。
這裡我特別要對軟體業巨頭提出強烈批評,
不指望你們開發多先進的瀏覽器,也不指望你們開發出新的腳本語言;百十萬的高工牛人,就讓瀏覽器能執行個寫起來舒服點的python都沒人能想到嗎?
還在那一天用著幾十年前的js和老外的js庫開發各種所謂高大上的產品,簡直丟人現眼。
這種垃圾語言我看都懶得看一眼,如果我去學,第一也是為了進行深入批判。嗯,所以這篇可能會有續篇。
我這人作為程式員的一項使命就是消滅網站和應用程式中的JS。
肯定有人罵我咋不自己寫個瀏覽器,我的回答就是我命苦沒錢自己在家做,以後有錢又要忙死。而且這麼罵的人都是看不懂我那網站上Flash做的demo的蠢貨或者乾脆不是程式員的。
其實我還想讓開源社區來實現瀏覽器或者“可以執行bean文檔中嵌入的腳本的Spring”之類的應用產品,不花錢、有人替我實現才好。
最後我再嘮一遍:JS就是網景公司當初為了網頁能夠互動而隨手做的玩具語言。而且跟敗在自己手下的微軟的垃圾VB大概是一個檔次。
最初的禍端主要是瀏覽器廠商不敢把UI組件寫完善,怕阻礙開發者自己定製,又很賤地認為不會有開發者自己實現整套UI組件所以沒提供底層API。我覺得其實是智商與能力不夠,沒有好的解決方案(IE之爛大家有目共睹,FF我懷疑已成為洗錢基金,開發團隊我也也缺乏瞭解)。當然對比桌面應用程式以及第一代RIA(Flash、JavaFx、微軟銀光)來看就很明顯的觀察出,其實是因為UI組件被寫死了。
UI既然寫死那麼就要儘量做得容易自定義 。這樣就註定了現在大量JS框架紛亂於世的格局。
所以後來Html5第一要件就是提供Canvas這套繪圖API讓開發者可以完全地自己實現UI組件。
然而可悲的是依然沒有一個大神或大廠站出來一刀剁了孽障JS 。
侃一侃:從瀏覽器的誕生與發展說JS