javascript - 为什么 __proto__ 是相同的

标签 javascript prototype

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

相关文章:

javascript - 为客户取消 'One week trial' 的最佳惯例?

javascript - 可以获取两个特定正则表达式匹配之间的文本吗?

javascript - JavaScript 如何创建对象?

javascript - 在 JavaScript 中混入本身就是对象的对象属性

javascript - 当 HTMLElement.onclick 事件调用时,在其函数中获取对象的属性 - javascript

javascript - jQuery 验证 addmethod - 如何返回不同的语言消息?

javascript - 为通用事件处理程序提供参数

javascript - 使用 cookie 仅显示一次叠加层

java - "Creator"配置继承对象的模式

javascript - 这个函数是如何在 JavaScript 中沿着原型(prototype)链向上爬的?