JavaScript中的对象原型

时间:2015-07-31 18:53:04

标签: javascript object prototypal-inheritance prototype-programming

我尝试了以下代码段:

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

这会返回 Object {} ,而我希望它返回与 man 相关联的对象。但是,这个片段:

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

Object.getPrototypeOf(child);

它确实返回与 man 相关联的对象。从概念上讲,我哪里出错?

2 个答案:

答案 0 :(得分:2)

区别的原因在于它是指定要做的事情。 Object构造函数只是将其参数强制转换为对象 - 它对原型没有任何作用:

  

当调用Object构造函数时没有参数或带有一个参数值时,采取以下步骤:
  1.如果提供了价值,那么
      一个。如果Type(value)是Object,那么
      一世。如果值是本机ECMAScript对象,则不要创建新对象,只需返回值。   http://es5.github.io/#x15.2.2.1

另一方面,

Object.create设置原型:

  
      
  1. 如果Type(O)不是ObjectNull则会引发TypeError例外。
  2.   
  3. 让obj成为创建新对象的结果,就像表达式new Object()一样Object是具有该名称的标准内置构造函数
  4.   
  5. 将obj的[[Prototype]]内部属性设置为O.
      http://es5.github.io/#x15.2.3.5
  6.   

答案 1 :(得分:1)

我认为概念上的误解在于你认为new Object()的作用。如果将对象传递给new Object(),则新对象将具有该对象具有的任何属性。但是,它不会使用原始对象的原型创建新对象,只需获取每个属性并将其添加到新创建的对象中。