1
var Object1 = {};
var Object2 = new Object();
var Object3 = Object.create({});

当我检查原型是否等于Object.prototype

前两个返回true,第三个返回false

为什么会这样?

Object.getPrototypeOf(Object1)===Object.prototype //true
Object.getPrototypeOf(Object2)===Object.prototype //true
Object.getPrototypeOf(Object3)===Object.prototype //false
4

2 回答 2

2

仅仅是因为如果您查看文档中的Object.create(),您会发现此方法:

使用指定的原型对象和属性创建一个新对象。

如果你用以下方式调用它:

Object.create({})

您传递的不是原型,而是一个没有属性的空对象。

因此,如评论中所述,您需要这样称呼它:

Object.create(Object.prototype)
于 2015-07-22T08:28:02.933 回答
1

Object.create() 方法使用指定的原型对象和属性创建一个新对象。

在幕后,它执行以下操作:

Object.create = (function() {
  var Temp = function() {};
  return function (prototype) {
    if (arguments.length > 1) {
      throw Error('Second argument not supported');
    }
    if (typeof prototype != 'object') {
      throw TypeError('Argument must be an object');
    }
    Temp.prototype = prototype;
    var result = new Temp();
    Temp.prototype = null;
    return result;
  };
})();

所以正确的用法是:

var Object3 = Object.create(Object.prototype);

或者,如果您想让您的示例工作:

Object.getPrototypeOf(Object.getPrototypeOf(Object3)) === Object.prototype // true 

原型链在这里发挥作用:

console.dir(Object3)
 -> __proto__: Object (=== Your Object Literal)
   -> __proto__: Object (=== Object.prototype)
于 2015-07-22T08:25:39.070 回答