1
across 322 天前 via iPhone
这个不懂没资格做团队开发,谁知道你还有多少坑
|
2
Austaras 322 天前
没有
|
![]() |
4
Puteulanus 322 天前
完了,被开除开发籍了
新项目应该不会有需要用到的了吧,维护老项目可能遇上手写的 感觉大概知道是怎么回事就行了,真需要用的时候再去查 面试考这个我更倾向于是八股文 |
![]() |
5
liveoppo 322 天前 ![]() 我不是专家,仅供参考:
1 、绝大部分工作都涉及不到原型链; 2 、只要能用其他方法解决问题,就绝对不要用原型链。 |
![]() |
6
seki 322 天前
如果技术栈都是现代的,基本不用考虑原型链的事情
如果一份工作内容里面要熟练掌握原型链才能做,那么可能是技术栈太陈旧或者太偏门了,或者真的是要钻研到很深入的某些领域的。前者的话建议还是别去了,人生苦短。 |
7
misdake 322 天前
如果要深入底层去做团队或者公司的基础设施,那有可能需要。其他情况下需要的可能性挺低的。
|
![]() |
8
rabbbit 322 天前
包之类的可能会用.业务用不着,需要继承也是用 class
|
![]() |
9
debuggerx 322 天前
日常开发毫无用处,谁手写原型链我跟谁急,尤其是上了 TS 之后还用那些奇怪特性,我愿称之为 JS 遗毒。
除了某些老掉牙的项目和库,唯一能想到的情况就是调试某些转译后的 ES5 代码可能会碰到,不过调试 debug 时基本也不太会被这块影响,差不多能看懂就行了。 总的来说,新代码就用新特性写,转译就配好 sourcemap ,找库尽量避免太老的就行 |
10
nulIptr 322 天前
二手前端写 react+ts ,别说原型,连 this 都没用过
|
![]() |
11
libook 322 天前 ![]() 做过 7 年 JS 全栈开发,感觉开发中有用,可以为解决问题提供更多思路,但确实用到的频率很低。
原型链不是废弃的特性,反而是核心特性,很多新特性是在原型链基础上设计的,面试的时候能够灵活回答原型链的问题,证明候选人掌握 JS 核心原理,未来解决问题的思路更广。至少我觉得原型链的知识比作用域提升的知识更有实用价值。 JS 中类似的有用但不常用的特性还有不少,比如迭代器(和异步迭代器),很少的情况下需要自己构造迭代器,但在一些场景下自己构造迭代器可以显著降低代码复杂度。 |
![]() |
12
thulof 322 天前
实现装饰器的时候要用到
|
![]() |
13
SolidZORO 322 天前 via iPhone
别说原型,你看 react 把 this 都给整没了,就是担心你们用错了。要是真有这样执着原型的公司,你跑还不行吗?
|
![]() |
14
autoxbc 322 天前 ![]() 你故意避开什么,最终就会在什么上吃亏,搞技术不该有短板
|
![]() |
15
hamsterbase 322 天前
如果是 前端框架开发、工具链开发,这个还是挺有用的。
如果是普通业务开发,应该用不上。 |
![]() |
16
shuimugan 322 天前
有其它语言实际项目经验( PHP 、Python 、Java )经验,用 Node.js + TypeScript 写了 5 年项目(监控告警、爬虫、文件服务、网关、扫描器),目前代码里没出现过一次 prototype ,仅供参考。
|
17
golangLover 322 天前 via Android
沒有任何用处。只是通过面试。js 就是多这种没意义的事
|
![]() |
18
KuroNekoFan 322 天前 via iPhone
基本没有,我都推广 this free
|
![]() |
19
ccyu220 322 天前 ![]() 你让我想起了
var that = this 这玩意估计除了引入都 vue2 项目,之后我从来没用过了 |
20
thinkershare 321 天前 ![]() 最快确定一个人是否完整,系统且认真的学习过 JavaScript, 而不是将其当作玩具语言, 到处复制粘贴代码. 面试如果招聘前端, 如果原型都无法解释清楚, 肯定会被我淘汰, 因为这个玩意非常简单, 这个都搞不明白, 说明要么智力有问题, 要么根本没花心思在自己使用的工具上. 实际项目手动使用 prototype 非常少, 但它总是在起作用. 编写兼容库的时候, 会通过补全原型来模拟一些原生方法.
|
21
TWorldIsNButThis 321 天前 via iPhone
纯纯的 bullshit 属于是
|
22
lmshl 321 天前
随便看看 MDN 脑子里有个印象就行了,不值得深入学习。进化了几亿年才有的这宝贵的大脑空间,用来装原型链多少有点反进化论了。
|
23
hunter0122 321 天前
@ccyu220 这句真的是刚学 vue2 时候挠破头都没想通的东西。哈哈哈哈
|
24
wenwei1202k 321 天前
原型链是 js 的基础内容,现在都有 class 的语法糖了,常规业务代码里别用 prototype ,但是如果要写些抽象工具类库或者类似框架级别就非常有用,你的代码越抽象原型链就越有用,有需要再研究未尝不可,初学的时候不容易感受到这种奇淫巧技的乐趣,typescript 并不是不建议使用 prototype ,而且需要用到的情况太少了
|
![]() |
25
cocong 321 天前
实际帮助就是你获得了一种实现面向对象的实现方式。像 Lua 没有 class ,但可以用 元表 实现,道理和 原型 差不多。所以说知识都是想通的。就不如数据库可以通过外键,关联其它表,再类比原型,就可以实现数据的继承,起到压缩数据,节省空间的效果。
其实这些基础知识什么的并不难,正所谓“会者不难、难者不会”,多学多动多思考,仅此而已。 |
26
Leviathann 321 天前 ![]() 别说 prototype 了
我连 class 和 interface 都不用 只用 type 和函数 /lambda |
![]() |
27
Rocketer 321 天前 via iPhone ![]() 私以为,只有花了太多功夫在这些过时概念上的人才会说它有用,目的只是找回心中的那分平衡。
可能用原型链能让代码变得短一些,但这也会降低代码的可读性,在团队开发中会被视为奇技淫巧,不受欢迎。 更何况 JavaScript 的奇技淫巧比 Java 少多了,Java 大神在团队里都不敢玩,JavaScripter 还炫啥技呢? |
![]() |
28
irisdev 321 天前
用不上,但是还是要知道的
|
29
hussar 321 天前 via iPad
js 继承是不是也用不到,除了 class extends 见到过,其他的…
|
30
dcsuibian 321 天前
工作中根本不用,但你得会。
框架不懂原理也就算了,js 的基础还是得打牢啊。 |
![]() |
31
wisetc 321 天前 via iPhone
js 中类的继承底层是原型链,不要想得太复杂,不掌握也能开发,只是不理解 js 的怪异之处。
|
![]() |
32
fstar 321 天前
有点用啊。掌握了不容易写出错误代码。
问: const map = {}; 和 const map = Object.assign(null); 哪个是正确的哈希表写法。 |
33
AyaseEri 321 天前
不要求熟练,但至少得知道是咋回事吧。免得碰上极端情况需要人肉 debug babel 后的代码。
|
![]() |
34
vance123 321 天前 via Android ![]() 反序列化一个对象的时候,可以通过 setprototype 给它添加上方法。其它地方倒没用到过。
不过 prototype 是 js 的一个基石,你要知道再高级再诡异的用法,都逃不开这些东西。理解语言的边界在哪里还是有好处的 |
![]() |
35
Pastsong 321 天前
原型链用不到但是要懂,是语言核心设计的一部分,属于看你愿不愿意了解 How it works.
|
37
ruoxie 321 天前
很久很久以前看 JQ ,EXT JS 等源码会有用
|
![]() |
38
keithwhisper 321 天前
工程化的项目一般用不上奇技淫巧, 但是需要有能看懂和填坑的能力, 自己组可以控制代码, 但是对第三方的依赖无法控制, 万一被坑到了不至于找不出原因.
|
![]() |
39
adoal 321 天前 via iPhone ![]() OO 大沙文主义终于在 JS 程序员圈也取得了胜利😄
|
41
jones2000 321 天前
没什么用, 只用js基本的语法写, 这样起码下个接手的人能看懂。
|
![]() |
43
xuanbg 321 天前 ![]() 知道原型链能解决什么问题比掌握原型链更重要。一项语言的特性而已,平常根本用不到,以后能用到的机会无限趋向于 0 的知识,我的选择是:临时抱佛脚,不用坚决不学。
|
![]() |
44
renhou 321 天前
一般场景用不到,原型链对于大多数人就是为了面试而存在
|
45
elboble 321 天前
个人觉得 ES6 出来后 class 基本可以取代原型链了,当然老人老办法,新人新办法。下面讲得很清楚了。https://es6.ruanyifeng.com/#docs/class-extends
|
![]() |
46
DOLLOR 321 天前
我写了这么多年 typescript ,除了偶尔写写 angular ,都没写过几个 class 。
至于原型链,我能想到的使用场景,就是偶尔 hack 别人的东西,给别人的 class 加一些方法、polyfill 。 比如在 string 原型上挂一个 encode 方法 const encode = Symbol('encode') String.prototype[encode] = function(codeName){/*...*/} 然后就可以在字符串上使用 encode 方法 const gbkArrayBuffer = '测试'[encode]('gbk') |
![]() |
47
wu67 321 天前
最多就是往 vue 的原型上定义全局变量, 用来方便 this.*****这样全局调用. 如果封装公用库或者 sdk, 还是 class 方便.
|
48
charlie21 321 天前
理解原理 但不使用
|
![]() |
49
sampdoria 321 天前
说白了,那些不常用的 coding 知识的掌握程度,完全取决于程序员对自己的要求。
你可以选择去学,也可以选择远离它。人的精力有限,没人能面面俱到,这个很正常。选择取决于定位:这门语言,这门技术对你来说是饭碗,还是加菜;你是满足于做做 feature ,还是希望能深入进去,做点大事。 每个人都有自己的答案,你选择不学,没有问题,无非就是失去一些机会,看你能否接受呗 顺便提一句,面试的时候问一些不常用但是很基础的知识点,是非常正常的,跟什么八股无关。人家只是想看看你对自己的要求罢了。如果能选的求职者多,谁不愿意选一个对自己有要求的呢。 |
![]() |
50
zhouyg 321 天前
知道,理解,但工作 100%不要使用
|
![]() |
51
nomagick 321 天前
对码农没用,对工程师有用。
如果你发现没用,不好意思老哥还在码农阶段。 咱这还有好多没写过 class 搞不懂 this 的,怎么还能沾沾自喜了,我都替你们捉鸡啊真的 |
![]() |
52
marcong95 321 天前 ![]() 原型链确实不是什么很好用的东西,但是不太能理解的是,原型链这种概念真的给你们带来这么大的心智负担吗?似乎有缘还是要看看你们口中的八股到底把原型链这东西玩得多花。。。
建议直接手写 wasm ,本站似乎已经有位猛士已经这么操作了 |
53
shanejix 321 天前 via Android
没有原型的 js 还叫 js 么😑
|
54
yedanten 321 天前 via Android
个人见解,对于开发来说,没用,如果你搞安全,可能有那么点用,挖挖 babel 的漏洞,或者尝试修改破解一些 js 库有那么点帮助
|
![]() |
55
wangtian2020 321 天前
会了原型链就能解释在 vue 中
为什么我挂载在 Vue 对象上的工具属性 能在全局引用 就能理解原型链污染是怎么一回事 但是并没有卵用场景,知其然所以然好玩罢了 |
![]() |
56
bojue 321 天前
可以用不到,但是你要知道
|
57
aguesuka 321 天前
其实标题对于任意语言的常见 trick, 答案都是一样的, 用这门语言, 就绕不开, 但是能别用就不要用, 一定要用的情况控制起来. 另外一些非工程的场景, 比如说 debug, hack 时很有用.
|
![]() |
58
kamal 321 天前 ![]() |
![]() |
59
KouShuiYu 321 天前
用处不是太大,JS 都模块化了基本上用函数就解决一切了
|
![]() |
60
Lxxyx 321 天前
日常开发用不着,了解概念有必要,基本上 Class 就能覆盖大部分场景了。
至于那些说不懂原型写不了代码的,是在扯淡。。 |
![]() |
61
darkengine 321 天前
撕逼的时候有用,你没掌握原型链骂不过人家
|
64
vision1900 321 天前 ![]() 至少查 MDN 的时候,比如 `reduce`, 它显示的是 `Array.prototype.reduce` 你要知道是为什么
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce |
![]() |
65
qiumaoyuan 321 天前
ECMAScript 6 有了 class 和 extends 之后比较用不着这玩意。这玩意主要是在 ECMAScript 6 之前用于实现“类继承”的功能。
|
![]() |
66
lisongeee 321 天前
前端的 ui 构建这块其实不太应用”继承“的概念
|
![]() |
67
panlatent 321 天前
我觉得学习这个东西花不了太多时间,但不了解容易在你解决疑难杂症的时候花费数倍甚至数十倍的时间
|
![]() |
68
coolzjy 321 天前
ES 2015+ 日常代码直接接触原型和原型链的机会确实越来越少了,面向对象有 class 语法,[].slice.call(arguments) 这种语法也都被 Rest / Spread 操作符替代了,加上 FP 趋势,写几年代码也接触不到原型也挺正常的。
|
![]() |
69
AloneHero 320 天前 via Android
都怎么回事? class 的本质也是原型链啊,就日常开发确实很少用到,但是要想给团队做公共基础库(非工具类库),想把自己做的东西在公司级推广,肯定得考虑好既做好基础功能,又要给别人留够拓展的余地,这就需要非常明白你作为原型链上的一环会如何影响到你的子类实例,你的子类实例又会如何覆盖原型链。而且实际上这个机制挺简单的,没必要避开
|
![]() |
70
yaphets666 320 天前
@ccyu220 小程序有时候会用到,不支持箭头函数的地方
|
![]() |
71
codehz 320 天前
——目前主要的作用是做 monkey patch ——或者写 polyfill —— 原型链虽然说性能不好吧,但总比 Proxy 快
日常开发写的 class 其实在现行 es 标准下还是有些区别的,不仅仅只是一个“语法糖”,不用 class 语法的情况下有些特性是无法实现的——最基础的,原型写法无法正确继承 Array, String, Date, Map 等内建类型,也无法继承 HTMLButtonElement 等 Dom 类型——导致 CustomElement 无法实现——从标准角度来说,它是对原本对象模型的一个完全改进,绝非能说一句语法糖即可概况——而保留的原型只是为了维持以往的兼容性 |
![]() |
72
waiaan 320 天前
基本用不到但必须知道。
|
![]() |
73
duan602728596 320 天前
项目里的原型链和面试时候的原型链是两种
|
![]() |
74
devwolf 320 天前
目前为止对我的工作没有帮助,但我室友的那边公司里确实有人(大佬)在用(有次我去帮忙改前端的时候瞥到过)。
|
75
ming159 320 天前
普通的写写逻辑你可以不关心原型链,无非就是声明个变量,if-else ,for 循环。
但是,如果你是处在核心研发团队,做框架,并且还提供个其他人用,如果你不懂原型链,那肯定不敢用你,鬼知道你把 “this” 给了谁。 |
![]() |
76
ctrlcoder 320 天前
用不用是 一回事,懂不懂是一回事
|