4

Javascript 的原型和原型链相关的基础知识对实际工作有什么帮助吗

 2 years ago
source link: https://www.v2ex.com/t/851000
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

Javascript 的原型和原型链相关的基础知识对实际工作有什么帮助吗

  WangLiCha · 8 小时 58 分钟前 · 1319 次点击
自学的前端做了些东西,现在比较习惯用更接近传统面向对象语言一点的 Typescript ,之前学 JS 的原型链的时候费了很大的功夫,有点想知道熟练掌握原型链的话对于面试以外能有什么实际的帮助吗?想请教一下各位可能用 JS 更多一点的 V 友们。
42 条回复    2022-05-06 01:16:50 +08:00
across

across      8 小时 51 分钟前 via iPhone

这个不懂没资格做团队开发,谁知道你还有多少坑
Austaras

Austaras      8 小时 46 分钟前

WangLiCha

WangLiCha      8 小时 45 分钟前

@across 这个是怎么个说法?如果是团队都使用 Typescript 会好些吗?
Puteulanus

Puteulanus      8 小时 44 分钟前

完了,被开除开发籍了

新项目应该不会有需要用到的了吧,维护老项目可能遇上手写的
感觉大概知道是怎么回事就行了,真需要用的时候再去查
面试考这个我更倾向于是八股文
liveoppo

liveoppo      8 小时 43 分钟前

我不是专家,仅供参考:
1 、绝大部分工作都涉及不到原型链;
2 、只要能用其他方法解决问题,就绝对不要用原型链。
seki

seki      8 小时 40 分钟前

如果技术栈都是现代的,基本不用考虑原型链的事情

如果一份工作内容里面要熟练掌握原型链才能做,那么可能是技术栈太陈旧或者太偏门了,或者真的是要钻研到很深入的某些领域的。前者的话建议还是别去了,人生苦短。
misdake

misdake      8 小时 31 分钟前

如果要深入底层去做团队或者公司的基础设施,那有可能需要。其他情况下需要的可能性挺低的。
rabbbit

rabbbit      8 小时 28 分钟前

包之类的可能会用.业务用不着,需要继承也是用 class
debuggerx

debuggerx      8 小时 24 分钟前

日常开发毫无用处,谁手写原型链我跟谁急,尤其是上了 TS 之后还用那些奇怪特性,我愿称之为 JS 遗毒。
除了某些老掉牙的项目和库,唯一能想到的情况就是调试某些转译后的 ES5 代码可能会碰到,不过调试 debug 时基本也不太会被这块影响,差不多能看懂就行了。
总的来说,新代码就用新特性写,转译就配好 sourcemap ,找库尽量避免太老的就行
nulIptr

nulIptr      8 小时 21 分钟前

二手前端写 react+ts ,别说原型,连 this 都没用过
libook

libook      8 小时 11 分钟前   ❤️ 1

做过 7 年 JS 全栈开发,感觉开发中有用,可以为解决问题提供更多思路,但确实用到的频率很低。

原型链不是废弃的特性,反而是核心特性,很多新特性是在原型链基础上设计的,面试的时候能够灵活回答原型链的问题,证明候选人掌握 JS 核心原理,未来解决问题的思路更广。至少我觉得原型链的知识比作用域提升的知识更有实用价值。

JS 中类似的有用但不常用的特性还有不少,比如迭代器(和异步迭代器),很少的情况下需要自己构造迭代器,但在一些场景下自己构造迭代器可以显著降低代码复杂度。
thulof

thulof      8 小时 2 分钟前

实现装饰器的时候要用到
SolidZORO

SolidZORO      8 小时 2 分钟前 via iPhone

别说原型,你看 react 把 this 都给整没了,就是担心你们用错了。要是真有这样执着原型的公司,你跑还不行吗?
autoxbc

autoxbc      8 小时 0 分钟前   ❤️ 2

你故意避开什么,最终就会在什么上吃亏,搞技术不该有短板
hamsterbase

hamsterbase      7 小时 49 分钟前

如果是 前端框架开发、工具链开发,这个还是挺有用的。

如果是普通业务开发,应该用不上。
shuimugan

shuimugan      7 小时 42 分钟前

有其它语言实际项目经验( PHP 、Python 、Java )经验,用 Node.js + TypeScript 写了 5 年项目(监控告警、爬虫、文件服务、网关、扫描器),目前代码里没出现过一次 prototype ,仅供参考。
golangLover

golangLover      7 小时 32 分钟前 via Android

沒有任何用处。只是通过面试。js 就是多这种没意义的事
KuroNekoFan

KuroNekoFan      7 小时 31 分钟前 via iPhone

基本没有,我都推广 this free
ccyu220

ccyu220      7 小时 27 分钟前   ❤️ 1

你让我想起了

var that = this

这玩意估计除了引入都 vue2 项目,之后我从来没用过了
thinkershare

thinkershare      6 小时 48 分钟前

最快确定一个人是否完整,系统且认真的学习过 JavaScript, 而不是将其当作玩具语言, 到处复制粘贴代码. 面试如果招聘前端, 如果原型都无法解释清楚, 肯定会被我淘汰, 因为这个玩意非常简单, 这个都搞不明白, 说明要么智力有问题, 要么根本没花心思在自己使用的工具上. 实际项目手动使用 prototype 非常少, 但它总是在起作用. 编写兼容库的时候, 会通过补全原型来模拟一些原生方法.
TWorldIsNButThis

TWorldIsNButThis      6 小时 32 分钟前 via iPhone

纯纯的 bullshit 属于是
lmshl

lmshl      6 小时 25 分钟前

随便看看 MDN 脑子里有个印象就行了,不值得深入学习。进化了几亿年才有的这宝贵的大脑空间,用来装原型链多少有点反进化论了。
hunter0122

hunter0122      6 小时 25 分钟前

@ccyu220 这句真的是刚学 vue2 时候挠破头都没想通的东西。哈哈哈哈
wenwei1202k

wenwei1202k      6 小时 16 分钟前

原型链是 js 的基础内容,现在都有 class 的语法糖了,常规业务代码里别用 prototype ,但是如果要写些抽象工具类库或者类似框架级别就非常有用,你的代码越抽象原型链就越有用,有需要再研究未尝不可,初学的时候不容易感受到这种奇淫巧技的乐趣,typescript 并不是不建议使用 prototype ,而且需要用到的情况太少了
cocong

cocong      5 小时 15 分钟前

实际帮助就是你获得了一种实现面向对象的实现方式。像 Lua 没有 class ,但可以用 元表 实现,道理和 原型 差不多。所以说知识都是想通的。就不如数据库可以通过外键,关联其它表,再类比原型,就可以实现数据的继承,起到压缩数据,节省空间的效果。

其实这些基础知识什么的并不难,正所谓“会者不难、难者不会”,多学多动多思考,仅此而已。
Leviathann

Leviathann      4 小时 54 分钟前

别说 prototype 了
我连 class 和 interface 都不用
只用 type 和函数 /lambda
Rocketer

Rocketer      4 小时 25 分钟前 via iPhone

私以为,只有花了太多功夫在这些过时概念上的人才会说它有用,目的只是找回心中的那分平衡。

可能用原型链能让代码变得短一些,但这也会降低代码的可读性,在团队开发中会被视为奇技淫巧,不受欢迎。

更何况 JavaScript 的奇技淫巧比 Java 少多了,Java 大神在团队里都不敢玩,JavaScripter 还炫啥技呢?
irisdev

irisdev      4 小时 16 分钟前

用不上,但是还是要知道的
hussar

hussar      3 小时 58 分钟前 via iPad

js 继承是不是也用不到,除了 class extends 见到过,其他的…
dcsuibian

dcsuibian      3 小时 43 分钟前

工作中根本不用,但你得会。
框架不懂原理也就算了,js 的基础还是得打牢啊。
wisetc

wisetc      3 小时 36 分钟前 via iPhone

js 中类的继承底层是原型链,不要想得太复杂,不掌握也能开发,只是不理解 js 的怪异之处。
fstar

fstar      3 小时 33 分钟前

有点用啊。掌握了不容易写出错误代码。
问:
const map = {}; 和 const map = Object.assign(null); 哪个是正确的哈希表写法。
AyaseEri

AyaseEri      3 小时 30 分钟前

不要求熟练,但至少得知道是咋回事吧。免得碰上极端情况需要人肉 debug babel 后的代码。
vance123

vance123      3 小时 30 分钟前 via Android

反序列化一个对象的时候,可以通过 setprototype 给它添加上方法。其它地方倒没用到过。
不过 prototype 是 js 的一个基石,你要知道再高级再诡异的用法,都逃不开这些东西。理解语言的边界在哪里还是有好处的
Pastsong

Pastsong      3 小时 28 分钟前

原型链用不到但是要懂,是语言核心设计的一部分,属于看你愿不愿意了解 How it works.
Pastsong

Pastsong      3 小时 27 分钟前

@fstar 抢答,是 const map = new Map();
ruoxie

ruoxie      3 小时 25 分钟前

很久很久以前看 JQ ,EXT JS 等源码会有用
keithwhisper

keithwhisper      3 小时 25 分钟前

工程化的项目一般用不上奇技淫巧, 但是需要有能看懂和填坑的能力, 自己组可以控制代码, 但是对第三方的依赖无法控制, 万一被坑到了不至于找不出原因.
adoal

adoal      3 小时 1 分钟前 via iPhone

OO 大沙文主义终于在 JS 程序员圈也取得了胜利😄
jones2000

jones2000      2 小时 47 分钟前

没什么用, 只用js基本的语法写, 这样起码下个接手的人能看懂。
agagega

agagega      1 小时 46 分钟前 via iPhone

@ccyu220
典中典了属于是

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK