首页 > 解决方案 > 我不清楚 JavaScript 函数/对象结构

问题描述

因此,我开始学习 JavaScript,以便为一些 ClojureScript 和 React 做好准备。我检查了许多描述,包括

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

描述中有一些模糊的词语使用(我们有类型(嗯?),(嗯......),实例继承对象原型函数构造函数方法)......所有的使用都令人不快。甚至偶尔会出现一种类型,使用一种实际上没有一阶类型的语言。

如果我理解正确的话,抛开实际的 JavaScript“类”,它们是语法糖化的对象,带有一些额外的东西:

JavaScript 对象和函数树

除非像“课程”这样的额外内容,我是否错过了一些东西。这是完全错误的吗?需要纠正什么?

标签: javascriptfunctionobjectjavascript-objects

解决方案


你谈论的一切都是一个对象:它有一个身份(在 OOP 意义上),它可以被变异。(对象旁边的另一种值是原语,它们是不可变的非引用值)。

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

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

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

对象不形成树。原型链接引用具有另一个原型链接的对象,依此类推,形成原型链。当然,从同一个对象继承的多个对象形成了一个树状结构,但与树不同的是,孩子们引用他们的父母,而不是相反。此外,没有根节点,任何对象都可以链接null而不是从任何东西继承——所以它充其量更像是一片森林。

这就是您需要了解的关于 JS 中对象结构的内容。我不打算扩展构造函数,它们的属性 name prototype,以及它们如何通过继承形成具有“实例”的类结构。您可以在其他地方找到有关该模式的详细信息,以及它如何应用于内置ObjectFunction层次结构。


推荐阅读