__proto__ 在 Javascript 中声明在哪里?
Where is __proto__ declared in Javascript?
考虑这个例子:
var a = {}
a.b =5
a.hasOwnProperty("b") // return True
a.hasOwnProperty("__proto__") // returns False
如果__proto__
本身没有声明为对象自己的属性那么,
- 这个
__proto__
属性 声明在哪里?
- 如果这个 属性 本身不是对象自己的 属性,那么在搜索原型链时如何引用它?
__proto__
属性 属于 Object
的 prototype
对象中声明的 Object.prototype
,而不是对象 [=] 的 属性 17=] 在你的代码中。这就是为什么当你这样做时它返回 false 的原因。
a.hasOwnProperty("__proto__") // returns False
如果你这样做:
console.log(Object.prototype.hasOwnProperty("__proto__")) // returns true
这个returnstrue
,因为__proto__
是自己的属性 of Object.prototype
console.log(Object.prototype.hasOwnProperty("__proto__"))
** 第 2 部分:**
__proto__
属性 是 Object.prototype
上的一个简单访问器 属性,由 getter
和 setter
函数组成。最终查询 Object.prototype
的 __proto__
的 属性 访问将找到此 属性,但不查询 Object.prototype
的访问将不会。如果在查询 Object.prototype
之前找到其他 __proto__
属性,则 属性 将隐藏在 Object.prototype.
上找到的那个
这就是它在原型链中找到路径的方式。
考虑这个例子:
var a = {}
a.b =5
a.hasOwnProperty("b") // return True
a.hasOwnProperty("__proto__") // returns False
如果__proto__
本身没有声明为对象自己的属性那么,
- 这个
__proto__
属性 声明在哪里? - 如果这个 属性 本身不是对象自己的 属性,那么在搜索原型链时如何引用它?
__proto__
属性 属于 Object
的 prototype
对象中声明的 Object.prototype
,而不是对象 [=] 的 属性 17=] 在你的代码中。这就是为什么当你这样做时它返回 false 的原因。
a.hasOwnProperty("__proto__") // returns False
如果你这样做:
console.log(Object.prototype.hasOwnProperty("__proto__")) // returns true
这个returnstrue
,因为__proto__
是自己的属性 of Object.prototype
console.log(Object.prototype.hasOwnProperty("__proto__"))
** 第 2 部分:**
__proto__
属性 是 Object.prototype
上的一个简单访问器 属性,由 getter
和 setter
函数组成。最终查询 Object.prototype
的 __proto__
的 属性 访问将找到此 属性,但不查询 Object.prototype
的访问将不会。如果在查询 Object.prototype
之前找到其他 __proto__
属性,则 属性 将隐藏在 Object.prototype.
这就是它在原型链中找到路径的方式。