首页 > 解决方案 > 为什么 __proto__ 是一样的

问题描述

为什么不同的对象具有相同的原型和相同的分配属性?

例如:

let a1 = {name: 'firstName'};
let a2 = {name: 'middleName'};
let a3 = Object.assign({}, {name: 'lastName'});

a1.__proto__ === a2.__proto__  // true
a1.__proto__ === a3.__proto__  // true

但是如果我使用构造函数:

let SomeFunc = function(){}
let b1 = new SomeFunc();
b1.__proto__ === a1.__proto__ // false
The __proto__ is different

看起来使用直接项目语法创建的所有项目都具有相同的proto

标签: javascriptprototype

解决方案


因为这三个对象都继承自同一个原型对象,Object.prototype. 这是从对象字面量创建的对象的默认设置。

在您的第二个示例中,b1确实继承自SomeFunc.prototype,因为它是使用new运算符创建的。这将与const b2 = new SomeFunct:相同Object.getPrototypeOf(b2) === Object.getPrototypeOf(b1)


推荐阅读