我知道很多创建JS对象的方法,但我不知道Object.create(null)
是哪一种。
问题:
它是否与以下内容完全相同:
var p = {}
vs
var p2 = Object.create(null);
发布于 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__
属性,而{}
有。
发布于 2018-04-13 03:16:53
使用{}
创建对象将创建一个原型为Object.prototype
的对象,该对象继承了Object
prototype的基本功能,而使用Object.create(null)
创建对象将创建一个原型为null的空对象。
发布于 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;
}
注释:出于好奇,我写了这篇文章,而且它只是用简单的术语写的,例如,我没有将属性描述符从第二个对象传输到返回对象。
https://stackoverflow.com/questions/15518328
复制相似问题