因此,我正在使用JavaScript,以便为一些ClojureScript和React做准备。我已经查看了许多说明,包括
...,但我仍然不确定函数/对象概念的结构。我意识到JavaScript没有像Java这样的“经典”类型系统,但实际上是Scheme,语法很尖的{}
。还是...
说明中的单词有一些混乱的用法(我们有 types (是?), classes (hmm ...), instances ,继承,对象,原型,函数,构造函数,方法)...都令人讨厌地流畅使用。甚至偶尔会出现某种类型的 kind ,这种语言实际上没有一阶类型。
如果我理解正确的话,则不考虑实际的JavaScript“类”,它们是在语法上加糖的对象,并具有一些额外的功能:
Function.prototype
会保存Function.prototype.length
和Function.prototype.name
之类的值,这些值仅对特定功能有意义。是什么赋予了?函数实例是否遮盖了Function.protoype
的所有相关值?除非有“课程”之类的额外内容,否则我是否缺少任何东西。这是完全错误的吗?需要纠正什么?
答案 0 :(得分:2)
您所谈论的都是对象:它具有一个标识(在OOP意义上),并且可以被更改。 (对象旁边的另一种值是不可变的非引用值的基元。)
一个对象具有属性(键-值对,其中键是符号或字符串)和一些内部机制。这种机制的一部分是其原型链接,可通过Object.getPrototypeOf
访问该链接,指向对象或对象可以从中继承属性的null
。
函数是具有扩展内部机制的对象,这些机制使其可以被调用。 (引用代码和上下文是其中的一部分,但在这里并不重要)。
所有这些对象不一定是任何东西的“实例”,它们可以作为对象创建并且存在。
对象不构成树。原型链接引用具有另一个原型链接的对象,依此类推,从而形成原型链。当然,从同一个对象继承的多个对象形成树状结构,但是与树不同,子对象不会反过来引用其父对象。而且,没有根节点,任何对象都可以链接null
并且不能从任何对象继承-因此,它充其量就像一个森林。
关于此,您需要了解JS中对象的结构。我不会扩展构造函数,名称为prototype
的属性以及它们如何通过继承形成具有“实例”的类结构的方法。您可以找到有关该模式的详细信息,以及如何将其应用于内置的Object
和Function
层次结构elsewhere。