gpt4 book ai didi

对 Object.prototype 的 JavaScript 原型(prototype)链引用

转载 作者:行者123 更新时间:2023-12-05 00:32:15 24 4
gpt4 key购买 nike

我需要一些帮助来理解原型(prototype)链。我不明白/不太确定我的假设是否正确。我想了解 Object.prototype 的链接。
一个例子

function A(){};
var newObject=new A();
我知道 newObject 有一个内部属性 [[prototype]],它引用了 A.prototype。
而且这个prototype-Object也有一个引用Object.prototype的内部属性,对吧?
但为什么它有那个引用?是不是因为 A 的原型(prototype)(用作构造函数)是一个可以想象由 A.prototype=new Object() 创建的对象(这将在后台自动完成)。现在我引用了 Object 的原型(prototype)?
我希望我解释清楚。
请让我知道您的意见。
非常感谢

最佳答案

是的,你的理解是正确的。
在 JS 中,几乎所有对象都有对 Object.prototype 的引用。在他们的原型(prototype)链中。[[Prototype]]一个对象是指Object.prototype作为原型(prototype)链的末端。在您的示例中,这意味着您所描述的内容:

            [[Prototype]]                  [[Prototype]]                   
newObject -----------------> A.prototype -----------------> Object.prototype
这适用于...
  • Object 创建的对象构造函数(即 new Object(...) ),
  • 使用对象字面量创建的对象(您可以将其视为 new Object() 调用后跟一组 Object.defineProperty 调用的语法糖)和
  • 由 JS 解释器内部创建的对象(如 A.prototype,它是在定义 A 函数时自动创建的)。

  • 不过,这个“规则”也有异常(exception):
  • Object.prototype本身。
    如果它有对...的引用,那么,它本身就会在查找不存在的属性时创建无限递归。因此,它没有原型(prototype),这意味着它的 [[Prototype]]null (这就是原型(prototype)链“结束”的方式)。
  • 使用 Object.create 创建的自定义对象或修改为 Object.setPrototype .[[Prototype]]可以这样设置,包括null或其他原型(prototype)链不以 Object.prototype 结尾的对象.
  • 关于对 Object.prototype 的 JavaScript 原型(prototype)链引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73273898/

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