使用Object.create解释为什么空对象实例的行为不同

时间:2014-02-21 07:07:35

标签: javascript

我在node.js v0.10.22中运行了以下命令。 我理解这个初始对象创建片段:

> var o1 = {};
> var o2 = Object.create(null)
> var o3 = Object.create(Object.prototype);
> var o4 = Object.create({})

> o1
{}
> o2
{}
> o3
{}
> o4
{}

> o1.prototype === void 0
true
> o2.prototype === void 0
true
> o3.prototype === void 0
true
> o4.prototype === void 0
true

然而以下让我感到困惑:

> o1 instanceof Object
true
> o2 instanceof Object
false
> o3 instanceof Object
true
> o4 instanceof Object
true

这种行为背后的解释是什么?

1 个答案:

答案 0 :(得分:2)

当你写这样的东西时:

var ob = {}; 
// its equivalent to Object.create(Object.prototype)

当你写:

Object.create(null) 
// doesn't inherit from anywhere and thus has no properties at all.

换句话说。默认情况下,javascript对象从Object继承,除非您显式创建它,指定null作为其原型,如Object.create(null)

此外,您必须阅读此question and answer,我认为它很棒