首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Object.create(null)创建JS对象和{}一样吗?

用Object.create(null)创建JS对象和{}一样吗?
EN

Stack Overflow用户
提问于 2013-03-20 16:12:35
回答 4查看 34K关注 0票数 167

我知道很多创建JS对象的方法,但我不知道Object.create(null)是哪一种。

问题:

它是否与以下内容完全相同:

var p = {}

vs

var p2 = Object.create(null);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-20 16:37:19

它们不是等价的。{}.constructor.prototype == Object.prototype,而Object.create(null)不继承任何东西,因此根本没有属性。

换句话说:默认情况下,javascript对象继承自object,除非您显式地以null作为其原型创建它,如:Object.create(null)

相反,{}将等同于Object.create(Object.prototype)

在Chrome Devtool中,你可以看到Object.create(null)没有__proto__属性,而{}有。

票数 223
EN

Stack Overflow用户

发布于 2018-04-13 03:16:53

使用{}创建对象将创建一个原型为Object.prototype的对象,该对象继承了Object prototype的基本功能,而使用Object.create(null)创建对象将创建一个原型为null的空对象。

票数 1
EN

Stack Overflow用户

发布于 2014-11-19 14:51:35

如果有人正在寻找实现Object.create(null),只是想知道它是如何工作的。它是使用非标准的__proto__编写的,因此,我不推荐使用。

function objectCreateMimic()
{
  /*optional parameters: prototype_object, own_properties*/
  var P = arguments.length>0?arguments[0]:-1;
  var Q = arguments.length>1?arguments[1]:null;
  var o = {};
  if(P!==null && typeof P === "object")
  {
    o.__proto__ = P;
  }
  else if(P===null)
  {
    o.__proto__ = null;
  }
  if(Q!==null && typeof Q === "object")
  {
   for(var key in Q)
   {
     o[key] = Q[key];
   }
  }
  return o;
}

注释:出于好奇,我写了这篇文章,而且它只是用简单的术语写的,例如,我没有将属性描述符从第二个对象传输到返回对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15518328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档