【问题标题】:Where is __proto__ declared in Javascript?__proto__ 在 Javascript 中声明在哪里?
【发布时间】:2020-12-28 07:29:51
【问题描述】:
考虑这个例子:
var a = {}
a.b =5
a.hasOwnProperty("b") // return True
a.hasOwnProperty("__proto__") // returns False
如果__proto__ 本身没有被声明为对象自己的属性,那么,
-
__proto__ 属性声明在哪里?
- 如果这个属性本身不是对象自己的属性,那么在搜索原型链时如何引用它?
【问题讨论】:
标签:
javascript
prototype-programming
【解决方案1】:
__proto__ 属性属于在Object 的prototype 对象中声明的Object.prototype,并且不是代码中对象a 的自己的属性。这就是为什么当你这样做时它返回 false。
a.hasOwnProperty("__proto__") // returns False
如果你这样做:
console.log(Object.prototype.hasOwnProperty("__proto__")) // returns true
这将返回true,因为__proto__ 是Object.prototype 自己的属性
console.log(Object.prototype.hasOwnProperty("__proto__"))
** 第 2 部分:**
__proto__ 属性是Object.prototype 上的简单访问器属性,由getter 和setter 函数组成。最终咨询Object.prototype 的__proto__ 的属性访问将找到此属性,但未咨询Object.prototype 的访问将不会找到。如果在查询Object.prototype 之前找到了其他__proto__ 属性,则该属性将隐藏在Object.prototype. 上找到的属性
这就是它如何在原型链中找到自己的方式。