在javascript中,monkey patching(即给内置对象扩展方法)是一种好的编程习惯吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在javascript中,monkey patching(即给内置对象扩展方法)是一种好的编程习惯吗?

2016-03-10 18:02:18 1970 1

《javascript语言精粹》一书4.7节(P32),它的标题是“给类型增加方法”,全书也多次是建立在此基础上的编程(如Function.method()),但是几天前我看了由三生石上翻译的文章“javascript秘密花园”(http://www.cnblogs.com/sanshi/archive...),其中有这么一节内容,却持了一种完全相反的观点:

扩展内置类型的原型(Extension of native prototypes)
一个错误特性被经常使用,那就是扩展Object.prototype或者其他内置类型的原型对象。
这种技术被称之为monkey patching并且会破坏封装。虽然它被广泛的应用到一些JS类库中比如Prototype, 但是我仍然不认为为内置类型添加一些非标准的函数是个好主意。
扩展内置类型的唯一理由是为了和新的JavaScript保持一致,比如Array.forEach。 (译者注:这是编程领域常用的一种方式,称之为Backport,也就是将新的补丁添加到老版本中。) The only good reason for extending a built-in prototype is to backport the features of newer JavaScript engines; for example, Array.forEach.
总结(In conclusion)
在写复杂的JavaScript应用之前,充分理解原型链继承的工作方式是每个JavaScript程序员必修的功课。 要提防原型链过长带来的性能问题,并知道如何通过缩短原型链来提高性能。更进一步,绝对不要扩展内置类型的原型,除非是为了和新的JavaScript引擎兼容。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 18:58:06

    一般来说,业界公认的是持后一种观点,不过如果你觉得你的代码是可控的话,扩展内置对象的prototype是很方便的一种方式(prototype库中大量使用了这种手段),尤其是扩展后以原对象实例为this上下文调用,api比较美观直接,否则的话,把对象实例作为参数传给方法,看起来就不那么“面向对象”了,当然,这个问题可以通过给原对象封装一层wrap来解决,比如jquery的包装,可以在$实例化的dom对象上调用方法,并且可以链式调用。

    另外一点,如果你扩展了内置对象的prototype,那么在遍历对象属性的时候要小心了,有些可能不是你想要的,可以通过hasOwnProperty过滤一下

    0 0
相关问答

37

回答

阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

管理贝贝 2017-02-10 15:14:36 77704浏览量 回答数 37

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157672浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 93747浏览量 回答数 28

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147221浏览量 回答数 22

17

回答

据说在家办公的程序员是这样写代码的?

问问小秘 2020-02-18 16:38:14 995082浏览量 回答数 17

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146031浏览量 回答数 31

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85354浏览量 回答数 23

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305607浏览量 回答数 249

13

回答

【云服务器分享】如何节省网站流量

dreamdoo 2012-10-15 10:36:09 80454浏览量 回答数 13

14

回答

对象存储oss【问答合集】

我是管理员 2018-08-03 14:54:02 67710浏览量 回答数 14
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载