我不清楚JavaScript函数/对象的结构

时间:2019-07-19 15:45:36

标签: javascript function object javascript-objects

因此,我正在使用JavaScript,以便为一些ClojureScript和React做准备。我已经查看了许多说明,包括

...,但我仍然不确定函数/对象概念的结构。我意识到JavaScript没有像Java这样的“经典”类型系统,但实际上是Scheme,语法很尖的{}。还是...

说明中的单词有一些混乱的用法(我们有 types (是?), classes (hmm ...), instances 继承对象原型函数构造函数方法)...都令人讨厌地流畅使用。甚至偶尔会出现某种类型的 kind ,这种语言实际上没有一阶类型。

如果我理解正确的话,则不考虑实际的JavaScript“类”,它们是在语法上加糖的对象,并具有一些额外的功能:

  • 个对象,还有个功能,它们被实例化为实例。 (我不确定什么真正区分对象和功能;它是实例树的根吗?)
  • 对象实例(图中的蓝色)通过“原型”关系(“内部”,因此被隐藏)形成一棵树。树的根是实例Object.prototype
  • 有一个全局对象 Object,也称为“对象构造函数” 。它具有对(未命名的对象)Object.prototype(也称为对象原型对象)的可见“原型”引用。
    • 我不确定全局对象Object是否确实是一个函数。它应该是。它对Function.prototype有内部引用吗?
  • 功能实例(图中的绿色)同样通过“原型”关系形成一棵树。树根是实例Function.prototype
    • 但也许它们不构成一棵树,而只是一个层次结构。毕竟,一个函数实例拥有一个原型链意味着什么?
  • 有一个全局对象 Function,也称为“函数构造函数” 。它具有对(未命名的对象)Function.prototype(也称为功能原型对象)的可见“原型”引用。
    • 如果我正确地解释了this text,则Function.prototype会保存Function.prototype.lengthFunction.prototype.name之类的值,这些值仅对特定功能有意义。是什么赋予了?函数实例是否遮盖了Function.protoype的所有相关值?
  • 每个函数实例均引用其创建上下文及其代码(黄色)
  • 最后,功能实例显然通过其“原型”值具有关联的原型。相反,该实例通过“构造函数”值引用回该函数实例。不确定会发生什么。

JavaScript object and function trees

除非有“课程”之类的额外内容,否则我是否缺少任何东西。这是完全错误的吗?需要纠正什么?

1 个答案:

答案 0 :(得分:2)

您所谈论的都是对象:它具有一个标识(在OOP意义上),并且可以被更改。 (对象旁边的另一种值是不可变的非引用值的基元。)

一个对象具有属性(键-值对,其中键是符号或字符串)和一些内部机制。这种机制的一部分是其原型链接,可通过Object.getPrototypeOf访问该链接,指向对象或对象可以从中继承属性的null

函数是具有扩展内部机制的对象,这些机制使其可以被调用。 (引用代码和上下文是其中的一部分,但在这里并不重要)。

所有这些对象不一定是任何东西的“实例”,它们可以作为对象创建并且存在。

对象不构成树。原型链接引用具有另一个原型链接的对象,依此类推,从而形成原型链。当然,从同一个对象继承的多个对象形成树状结构,但是与树不同,子对象不会反过来引用其父对象。而且,没有根节点,任何对象都可以链接null并且不能从任何对象继承-因此,它充其量就像一个森林。

关于此,您需要了解JS中对象的结构。我不会扩展构造函数,名称为prototype的属性以及它们如何通过继承形成具有“实例”的类结构的方法。您可以找到有关该模式的详细信息,以及如何将其应用于内置的ObjectFunction层次结构elsewhere