使用不同方法创建时创建的对象的差异

时间:2017-06-23 09:32:42

标签: javascript oop object prototype

我使用不同的方式创建了2个对象(object1和object2)。 我发现它们之间没有区别,除了它在Chrome开发者控制台中的显示方式(请参见下面的屏幕截图) enter image description here

var F;

function create(parent, properties) {
  F = function(p) {
    for(var i in p){
        this[i] = p[i].value;
    }
  };
  F.prototype = parent;
  return new F(properties);
}

var prop={ p: { value: 42 } };

var masterObject = {a: "masterObject value"}

var object1 = create(masterObject, prop);

var object2 = Object.create(masterObject, prop);

以下是我的问题:

  1. 由于我按照不同的方式创建对象,对象之间是否会有任何区别 - object1和object2?

  2. 上面的截图中有什么区别(以红色圈出)?

2 个答案:

答案 0 :(得分:1)

两个对象具有相同的属性,并从同一对象继承。但是,差异很小:

new F();
//vs.
Object.create(F.prototype);

构造函数(构建对象的函数)不同:

object1.constructor!==object2.constructor

所以这些对象不应该相等,但它没有实际效果,因为很少使用构造函数。

应该因为基本上

F.prototype=parent;

打破整个事情,因为 F.prototype.constructor 是用 F 初始化的,所以你重写了这个。更多信息在 Why is it necessary to set the prototype constructor?

答案 1 :(得分:0)

为变量分配函数时,您创建了一个命名函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name

它们功能相同。