gpt4 book ai didi

javascript - 函数和对象哪个先出现?

转载 作者:行者123 更新时间:2023-11-28 08:14:49 25 4
gpt4 key购买 nike

enter image description here

这个对象布局图很好地解释了 JavaScript 中的原型(prototype)链。但当涉及到以下各项之间的关系时,我有点困惑:

  1. 函数对象(){}
  2. 对象.prototype
  3. 函数 Function(){}
  4. 函数.原型(prototype)

我的问题是:以上四个要素中,哪个在先?因为我看到它们之间有一个循环。

  1. 函数对象.____proto____ -> Function.prototype
  2. Function.prototype.____proto____ -> Object.prototype
  3. Object.prototype.constructor -> 函数对象

另一个循环是:

  1. Function.prototype.constructor -> 函数功能
  2. 函数 Function.____proto____ -> Function.prototype

这怎么可能?

最佳答案

您在这里混淆了两个概念,一个是关于 native 构造函数的 prototype 属性,以及这些 native 构造实例的实际原型(prototype)(使用 __proto__ 表示) )。在您的第一个示例中:

  1. function Object.__proto__ -> Function.prototype
  2. Function.prototype.__proto__ -> Object.prototype
  3. Object.prototype.constructor -> function Object

这里您必须明白,ObjectFunction 本身就是函数,因为构造函数是函数的一种形式。

在#1中,Object是一个函数,所有函数的实际原型(prototype)都是Function.prototype

在#2 中,函数instances 继承的原型(prototype)继承自Object.prototype。这意味着当您从函数实例查找原型(prototype)链时,它将首先查看Function.prototype,然后查看Object.prototype

在 #3 中,constructor 属性适用于对象实例,尽管 Object.prototype 本身就是一个对象。它没有原型(prototype)。

对于第二个例子:

  1. Function.prototype.constructor -> function Function
  2. function Function.__proto__ -> Function.prototype

原型(prototype)中的内容适用于实例,而不是实际的函数构造函数本身。因为任何函数的构造函数都是 Function,所以这是有道理的。

还记得构造函数仍然是函数吗?因此,Function构造函数的原型(prototype)将是Function.prototypeFunction.prototype 本身是一个对象,因此它会有一个 __proto__Object.prototype

<小时/>

当您查看实际的函数实例时,以下是通过原型(prototype)链查找属性的方式:

own properties (on the function itself, functions are special objects)
|
|

Function.prototype (the __proto__ of the function itself)
|
|

Object.prototype (the __proto__ of Function.prototype)
|
|

END (Object.prototype's __proto__ is null)

关于javascript - 函数和对象哪个先出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23733696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com