未定义ob1.prototype时,Object.create()应如何从ob1.prototype创建obj2 .__ proto__?

时间:2019-12-26 19:10:54

标签: javascript object inheritance ecmascript-6 prototype

如果我们假设这句话是对的:“ 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();

我想念什么吗?

1 个答案:

答案 0 :(得分:1)

您的句子“ prototype是用于构建__proto__的对象”仅适用于被function调用的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;