JavaScript 中的对象原型

Object prototype in JavaScript

我尝试了以下代码片段:

var man = new Object();
man = {sex : 'male'}
var child = new Object(man);
child.firstName = 'foo'
child.lastName = 'bar'
Object.getPrototypeOf(child);

This returns Object {},而我期望它 return 与 man[=22= 关联的对象].然而,这个片段:

var man = Object.create(null);  
man = {sex : 'male'}
var child = Object.create(man);  
child.firstName = 'foo'  
child.lastName  = 'bar'

Object.getPrototypeOf(child);

它执行 return 与 man 关联的对象。从概念上讲,我哪里错了?

造成差异的原因在于它指定要执行的操作。 Object 构造函数只是将其参数强制转换为一个对象——它不对原型做任何事情:

When the Object constructor is called with no arguments or with one argument value, the following steps are taken:
1. If value is supplied, then
a. If Type(value) is Object, then
i. If the value is a native ECMAScript object, do not create a new object but simply return value. http://es5.github.io/#x15.2.2.1

Object.create另一方面,设置原型:

  1. If Type(O) is not Object or Null throw a TypeError exception.
  2. Let obj be the result of creating a new object as if by the expression new Object() where Object is the standard built-in constructor with that name
  3. Set the [[Prototype]] internal property of obj to O.
    http://es5.github.io/#x15.2.3.5

我认为概念上的误区在于你认为new Object()所做的事情。如果将对象传递给 new Object(),新对象将具有该对象具有的任何属性。但是,它并没有用原始对象的原型创建一个新对象,它只是取每个 属性 并将其添加到新创建的对象中。