为什么__proto__是一样的

时间:2019-07-30 19:20:05

标签: javascript prototype

为什么不同的对象具有相同的 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

1 个答案:

答案 0 :(得分:1)

因为所有三个对象都继承自同一原型对象Object.prototype。这是根据对象文字创建的对象的默认设置。

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