本文轉載自【微信公眾號:前端人,ID:FrontendPeople】經微信公眾號授權轉載,如需轉載與原文作者聯繫
自從重新拿起筆混跡掘金, 我幾乎每天都會打開掘金, 有時候也真的是審美疲勞, 雖然我大部分時間都是在看標題, 但是每隔幾天都有一個差不多的標題在你眼前飄過, 時間久了也有點麻木
昨天在天天拉的群裡, 看一幫小朋友討論
this
的問題, 有種回到了七八年前剛學前端的時候, 我在前幾篇文章中關於數據結構和算法對前端到底有沒有用, 穿插著做過一些評論, 現在我只想說, 如果你真的好好去看看, 學習下數據結構, 根本不至於對
, 對原型或者原型鏈有這麼多種不同的理解.
正文
掘金最近
bug
很多, 優弧很煩惱,
mind
想離職, 至於我的文章點讚和評論數莫名消失就不提了, 畢竟我是個佛系作者 讓我們回到本次吐槽的主題, 我想說的是, 如果你對
JavaScript
的原型系統有細節上的困惑或者愛好, 去看規範就好了, 那玩意你能看懂, 研究明白基本上已經是
語言規範專家了, 如果你看不懂, 研究不明白, 看別人的文章也沒用, 看多了還容易把自己搞混.
如果你想理解原型系統是個啥, 那就去看看數據結構中的鍊表, 回顧下大學課程, 對於那些不是科班出身的同學, 我想說的是網易雲課堂有免費的, 可以白嫖, 搜文章看對你沒有多大幫助, 缺少這些計算機基本的知識, 你的職業生涯不僅沒有上限而且短命. 如果有時間到處去搜別人整理好的東西, 別人的理解, 不如回去好好看看什麼是鍊表 先理解鍊表, 再理解原型鏈, 你就不會衝動寫文章了, 因為沒什麼可寫的.
鍊表是啥, 就是個首尾相連的線性的數據結構, 鍊表的好處就是可以很方便的按順序執行一些邏輯, 在
LeetCode
上通常用 JavaScript 寫個鍊表大概是這樣
head {
next: second{
next: null
}
}
然後原型鏈是什麼, 原型鏈就是個很複雜的鍊表, 但基本的結構是一樣的, 如果你把鍊表中的節點看成是原型, 那 this 其實就是鍊表當前指向的那個原型.
就這麼簡單, 沒了, 至於
bind call apply
無非是附加的
api
用來指向或者綁定不同的原型, 所謂綁定也不過是存下一個變量指向鍊表上的某個節點.
如果你不理解鍊表, 原型, 原型鏈, 構造函數,
, 箭頭函數,
這些概念對你來說都是散裝的, 我在之前的文章中提到過, 沒有核心的數據結構的知識作為主幹, 你看更多的文章, 學更多的這些概念的理解也沒有任何用處, 而且說實話就是 JavaScript 作者自己都不一定記得這些概念所涉及的細節, 這些細節就隱藏在 ECMA 的規範裡, 如果你真的想成為一個有生命力的, 能幹的久一點的前端程式設計師, 我建議你的學習順序應該是
數據結構
→
ECMA 規範 MDN 輔助
→ 看看別人文章的理解對照自己的理解, 有精力你就噴他, 沒精力就自己好好繼續去思考
後話
掘金上大量的概念性文章的獲得大量的點讚, 在我看來就是沒有掌握正確的學習方法導致, 前端開發社區不成熟的表現, 七八年過去了
一個社區的初學者或者新手們還是在討論相同的東西, 這真的是一種悲哀. 這也說明另一個問題, 上一代的前端程式設計師要麼就是沒有真正成熟起來, 要麼就是都走到另一條路上去了(都去搞業務了), 導致整個社區一直在不斷重複的傳承相同的概念, 相同的知識. 沒有任何進步.