【发布时间】:2019-11-28 15:28:57
【问题描述】:
所以,我开始学习 JavaScript,以便为一些 ClojureScript 和 React 做好准备。我检查了许多描述,包括
- MDN Web Docs on JavaScript
- 这本书"JavaScript - The Good Parts"(有点旧,因为它是关于 JavaScript 1.7/1.8(2008 年之前))
- 以及其他几个网络资源。
...我仍然不确定函数/对象概念的结构。我意识到 JavaScript 没有像 Java 这样的“经典”类型系统,但实际上是 Scheme 和尖锐的 {} 语法。还是……
描述中有一些模糊的词使用(我们有 types(嗯?),classes(hmm...),instances em>、继承、对象、原型、函数、构造函数、methods) ... 都使用得非常流畅。甚至偶尔会有 kind 被大肆宣传,这种语言实际上并没有一阶类型。
抛开实际的 JavaScript“类”,如果我理解正确的话,它们是语法糖化的对象,带有一些额外的东西:
- 有对象,也有函数,它们被实例化为实例。 (我不确定对象和函数的真正区别是什么;它是实例树的根吗?)
- 对象实例(图中蓝色)通过“原型”关系(这是“内部”,因此被隐藏)形成一棵树。树根是实例Object.prototype。
- 有一个全局对象Object,也称为“对象构造函数”。它具有对(未命名的对象)Object.prototype(也称为对象原型对象)的可见“原型”引用。
- 我不确定全局对象Object 是否确实是一个函数。它应该是。它是否有对Function.prototype 的内部引用?
-
函数实例(图中的绿色)同样通过“原型”关系形成一棵树。树根是实例Function.prototype。
- 但也许它们不会形成树,只是一个层次结构。函数实例拥有原型链到底意味着什么?
- 有一个全局对象Function,也称为“函数构造函数”。它有一个对(未命名的对象)Function.prototype(也称为函数原型对象)的可见“原型”引用。
- 如果我正确地解释了this text,
Function.prototype拥有像Function.prototype.length和Function.prototype.name这样的值,它们只对特定函数有意义。是什么赋予了?函数实例是否会影响Function.protoype的所有相关值?
- 如果我正确地解释了this text,
- 每个函数实例都引用其创建上下文及其代码(黄色)
- 最后,函数实例显然通过其“原型”值具有关联的原型。相反,该实例通过“构造函数”值引用回函数实例。不知道那是做什么的。
除了“课程”之类的额外内容,我是否遗漏了一些东西。这是完全错误的吗?需要纠正什么?
【问题讨论】:
-
一篇文章中有这么多问题。你至少要分开。
-
要是我有几个小时来回答这个问题就好了……
标签: javascript function object javascript-objects