首页 > 解决方案 > 当 ob1.prototype 未定义时,Object.create() 应该如何从 ob1.prototype 创建 obj2.__proto__?

问题描述

如果我们假设这句话是真的:“prototype是用于构建的对象__proto__”,那么 Object.create 是如何工作的?如果你这样做:

let obj1 = {
  name: "obj1",
}

const obj2 = Object.create(obj1);

Object.create()应该obj2.__proto__从什么ob1.prototype时候开始创建ob1.prototype??undefined

也许Object.create()使用另一种创建原型继承的方法而不是构造函数或工厂函数?

因为,在Object.create()上面的例子中,这是真的:

console.log(obj2.__proto__ === obj1);

但是如果我们对构造函数做同样的事情,这将是真的:

console.log(obj2.__proto__ === obj1.prototype);

用函数构造对象:

function obj1(name) {
  this.name = name;
}

const obj2 = new obj1();

我错过了什么吗?

标签: javascriptobjectinheritanceecmascript-6prototype

解决方案


您的句子“prototype是用于构建的对象__proto__”仅适用于function被调用的 s new。例如

  let dog = new Animal();

等于:

 let dog = Object.create(Animal.prototype); // <<<
 Animal.call(dog);

原型继承本身只是意味着对象包含__proto__对其原型的“内部”()引用。随着Object.create您创建一个对象,其原型设置为传递的对象。所以

  let inherited = Object.create(obj)

相当等于

 let inherited = {};
  inherited.__proto__ = obj;

推荐阅读