__proto__ 在 Javascript 中声明在哪里?

问题描述

考虑这个例子:

df['date'] = df['date'].apply(lambda x: pd.to_datetime(str(x)+'1',format='%Y%W%w'))
style_format = {'date':'{:%Y%W}'}
df.style.format(style_format)

如果 var a = {} a.b =5 a.hasOwnProperty("b") // return True a.hasOwnProperty("__proto__") // returns False 本身没有声明为对象自己的属性,则

  1. __proto__ 属性在哪里声明?
  2. 搜索原型链时如何引用该属性,如果它本身不是对象自己的属性

解决方法

__proto__ 属性属于在 Object.prototypeprototype 对象中声明的 Object,而不是您代码中对象 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 上的一个简单访问器属性,由 gettersetter 函数组成。最终查询 __proto__Object.prototype 的属性访问会找到此属性,但不查询 Object.prototype 的访问不会。如果在查询 __proto__ 之前找到其他 Object.prototype 属性,该属性将隐藏在 Object.prototype.

上找到的属性

这就是它在原型链中找到的方式。