如果我们假设这句话是对的:“ 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();
我想念什么吗?
答案 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;