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

标签 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. 从上面的截图(红圈内)可以看出什么区别?

最佳答案

两个对象具有相同的属性,并且继承自同一个对象。但是,有一个小小的区别:

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?

关于javascript - 使用不同方法创建时创建的对象的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717978/

相关文章:

javascript - 带有溢出隐藏和子元素的 DOM 元素,DOM 可以测量高度/宽度吗?

javascript - 开始使用 Withings API

java - System.exit(0) 不起作用和面向对象的设计。

c# - 父类(super class)构造函数中的虚拟化

javascript - 以变​​量内容为键向现有对象添加新值?

javascript - JQuery/Flask - 将数据以 JSON 形式从服务器发送到浏览器

javascript - 使DIV中的内容不可编辑

c++ - 将函数作为参数传递给 C++ 中的方法

javascript - 在 Javascript 中获取键的属性

javascript - 如何使用 JS spread rest destruction 删除嵌套属性?