【问题标题】:What does the built in object hierarchy look like in javascript?javascript 中的内置对象层次结构是什么样的?
【发布时间】:2013-11-10 15:23:02
【问题描述】:

我一直在寻找一个图表,其中显示了内置类型的 javascript,例如 FunctionString,但在 google 上,我一直在寻找与浏览器相关的图表,例如 Window

我只是在寻找纯js对象图。我知道 ECMA 规范,但我正在寻找图表,因为我是视觉类型。

【问题讨论】:

  • 你能给我们举一个你已经找到的图表的例子吗?
  • what 的图表到底是什么?除了基本类型之外没有层次结构。
  • 我发现 none 正如我在问题中所说的那样。而且我还说我正在寻找内置类型的图表。

标签: javascript class-hierarchy


【解决方案1】:

JavaScript 类型没有太多深度可言,图表会相当扁平。它基本上是这样的(最后是 UML),尽管随着时间的推移这会变得过时,因为 JavaScript 是一种不断发展的语言:

  • 原始字符串
  • 原始布尔值
  • 原始数字
  • 原始BigInt(ES2020+,原始任意大整数)
  • 未定义类型,只有一个实例:undefined
  • Null 类型,只有一个实例:null
  • Symbol(原始类型)(ES2015+)
  • Proxy(一种对象类型,但不受默认对象原型支持)(ES2015+)
  • Object
    • String
    • Boolean
    • Number
    • BigInt (ES2020+)
    • Function
    • Date
    • RegExp
    • Array
    • Math
    • Error * EvalError * RangeError * ReferenceError * SyntaxError * TypeError * URIError * AggregateError (ES2020+)
    • JSON (ES5+)
    • ArrayBuffer (ES2015+)
    • DataView (ES2015+)
    • 类型化数组(Int8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64Array)(ES201)
    • Map (ES2015+)
    • WeakMap (ES2015+)
    • Set (ES2015+)
    • WeakSet (ES2015+)
    • Promise (ES2015+)
    • Reflect (ES2015+)

认为这是通过 ES2022 更新的。要获取最新信息,请查看规范中的the latest editor's draft

在 UML 中,它看起来像 this:

(点击图片打开它可以放大)

请注意,这只是 JavaScript 的类型树。它不包括许多其他在浏览器上经常使用 JavaScript 的东西(例如 DOMworkers APIweb storageFile API 等) .).

【讨论】:

  • 谢谢,这正是我想要的。你是把那个 UML 图做起来还是在某个地方找到的?
  • @AdamArold:不客气。它来自一个名为yuml.me 的好网站。 :-) 你输入一些特殊的文本,它就会绘制图表。
  • 非常好的图表,谢谢,我也在找这个。但我的理解是所有对象实际上都是Object 的一个实例,而var newObject = {}; 只是var newObject = new Object(); 的简写另一个例子是var newNumber = 34; 创建了一个Number 的新实例,它这就是为什么 number 变量继承了 Number 对象的属性和方法,而后者又继承了 Object 的属性和方法。
  • @bitfed: {}new Object 确实是同一件事,除非您已经覆盖或重新分配了 Object 符号(您可以这样做,但不应该这样做)。说它们都是 "...Object..." 的一个实例有点棘手(尽管有一个 instanceof 运算符)。 Object 是构造函数,而不是“类”。原型继承与基于类的继承完全不同。但是,是的,所有 JavaScript 对象(不同于主机提供的或外部对象)最终都共享相同的原型,该原型由 Object.prototype 属性引用。
  • @bitfed: var newNumber = 34; 不会创建Number 对象,它会创建一个数字primitive,这不是一回事。它似乎有方法,因为当您将属性访问器运算符应用于它时,它临时被提升为一个对象。因此,在完成var newNumber = 34; 并获得了我们的数字原语之后,如果我们执行console.log(newNumber.toFixed(2));,则该原语被提升为一个对象,该对象的toFixed 属性用于获取对函数的引用、调用的函数和临时对象被扔掉了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多