javascript - 为什么 __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。
解决方案
因为这三个对象都继承自同一个原型对象,Object.prototype
. 这是从对象字面量创建的对象的默认设置。
在您的第二个示例中,b1
确实继承自SomeFunc.prototype
,因为它是使用new
运算符创建的。这将与const b2 = new SomeFunct
:相同Object.getPrototypeOf(b2) === Object.getPrototypeOf(b1)
。
推荐阅读
- routing - .net核心路由到基于当前域名的剃须刀页面区域?
- jira - 如何将组件添加到 Jira 项目?
- r - 向“as.matrix”显式提供 nrow 和 ncol 不会创建维度
- java - 反序列化似乎不尊重@JsonIgnore
- reactjs - 带有样式组件和 CRUD 的文件结构
- c - Called object type 'void' is not a function or function pointer
- pdf - 为什么使用 ImageMagick/Ghostscript 将此 PDF 转换为图像后缺少文本?
- python - 停止失控递归,使 Python 函数正常工作
- swift - Scanning Real-World Object and generating 3D Mesh from it
- ios - 使用 MKDirections (Swift 4) 导出两点之间的行驶距离后,如何访问闭包外的距离值?