js创建对象,为什么第一种要比第二种性能高?性能高是啥意思,计算快?还是占用空间小?

第一种:

function EventHandlers() {}
EventHandlers.prototype = Object.create(null);
this._events = new EventHandlers();

第二种:
this._events = {};

image.png

阅读 1.5k
1 个回答

提到性能一般指时间,广义上确实也包含空间,但一般不特殊说明时就单指时间。


但文章里说的有点儿问题,这种写法不是跟 obj = {} 比更快,而是跟 obj = Object.create(null) 比更快(你截图里上面那段英文注释明晃晃的写着呢)。跟 obj = {} 压根不用比、一定是 obj = {} 最慢,原因很简单,因为原型链上的成员还要被拷贝,这也有额外的开销。

其实这里你现在已经可以忽略了,你看的这篇应该发布时间很早了(估计是 2016 年底到 2017 年初这个时间范围内写的),这还是 Node.js 6.x 时代前的做法,那时候 V8 还没对 Object.create 做优化,所以有这种还要用一个自定义空类型 hacked 的写法。

实际上你要去看 Node.js 8.x 之后的源码,会发现这个地方已经又改回成 Object.create(null) 了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题