为什么不同的对象具有相同的原型(prototype)以及相同的指定属性?
例如:
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。
最佳答案
因为这三个对象都继承自同一个原型(prototype)对象,Object.prototype
。这是从对象文字创建的对象的默认设置。
在第二个示例中,b1
确实继承自 SomeFunc.prototype
,因为它是使用 new
运算符创建的。它与 const b2 = new SomeFunct 相同:Object.getPrototypeOf(b2) === Object.getPrototypeOf(b1)
。
关于javascript - 为什么 __proto__ 是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57278705/