前端吐槽 - 原型链就是个链表, 有啥好研究的, 隔三差五来一下, 走马灯么?

17,715

前言

自从重新拿起笔混迹掘金, 我几乎每天都会打开掘金, 有时候也真的是审美疲劳, 虽然我大部分时间都是在看标题, 但是每隔几天都有一个差不多的标题在你眼前飘过, 时间久了也有点麻木, 昨天在 天天 拉的群里, 看一帮小朋友讨论 this 的问题, 有种回到了七八年前刚学前端的时候, 我在前几篇文章中关于数据结构和算法对前端到底有没有用, 穿插着做过一些评论, 现在我只想说, 如果你真的好好去看看, 学习下数据结构, 根本不至于对 this, 对原型或者原型链有这么多种不同的理解.

正文

掘金最近 bug 很多, 优弧很烦恼, mind 想离职, 至于我的文章点赞和评论数莫名消失就不提了, 毕竟我是个佛系作者

让我们回到本次吐槽的主题, 我想说的是, 如果你对 JavaScript 的原型系统有细节上的困惑或者爱好, 去看规范就好了, 那玩意你能看懂, 研究明白基本上已经是 JavaScript 语言规范专家了, 如果你看不懂, 研究不明白, 看别人的文章也没用, 看多了还容易把自己搞混.

如果你想理解原型系统是个啥, 那就去看看数据结构中的链表, 回顾下大学课程, 对于那些不是科班出身的同学, 我想说的是网易云课堂有免费的, 可以白嫖, 搜文章看对你没有多大帮助, 缺少这些计算机基本的知识, 你的职业生涯不仅没有上限而且短命. 如果有时间到处去搜别人整理好的东西, 别人的理解, 不如回去好好看看什么是链表

先理解链表, 再理解原型链, 你就不会冲动写文章了, 因为没什么可写的.

链表是啥, 就是个首尾相连的线性的数据结构, 链表的好处就是可以很方便的按顺序执行一些逻辑, 在 LeetCode 上通常用 JavaScript 写个链表大概是这样

head {
	next: second{
    	next: null
    }
}

然后原型链是什么, 原型链就是个很复杂的链表, 但基本的结构是一样的, 如果你把链表中的节点看成是原型, 那 this 其实就是链表当前指向的那个原型.

就这么简单, 没了, 至于 bind call apply 无非是附加的 api 用来指向或者绑定不同的原型, 所谓绑定也不过是存下一个变量指向链表上的某个节点.

如果你不理解链表, 原型, 原型链, 构造函数, this, 箭头函数, bind call apply 这些概念对你来说都是散装的, 我在之前的文章中提到过, 没有核心的数据结构的知识作为主干, 你看更多的文章, 学更多的这些概念的理解也没有任何用处, 而且说实话就是 JavaScript 作者自己都不一定记得这些概念所涉及的细节, 这些细节就隐藏在 ECMA 的规范里, 如果你真的想成为一个有生命力的, 能干的久一点的前端程序员, 我建议你的学习顺序应该是

数据结构 → ECMA 规范 MDN 辅助 → 看看别人文章的理解对照自己的理解, 有精力你就喷他, 没精力就自己好好继续去思考

后话

掘金上大量的概念性文章的获得大量的点赞, 在我看来就是没有掌握正确的学习方法导致, 前端开发社区不成熟的表现, 七八年过去了, 一个社区的初学者或者新手们还是在讨论相同的东西, 这真的是一种悲哀. 这也说明另一个问题, 上一代的前端程序员要么就是没有真正成熟起来, 要么就是都走到另一条路上去了(都去搞业务了), 导致整个社区一直在不断重复的传承相同的概念, 相同的知识. 没有任何进步.