类 打印 JavaScript ECMAScript 5?

Classes in JavaScript ECMAScript 5?

我想知道 JavaScript ECMAScript 5 中是否有 类?我读了一些文献,对此有不同的看法。我知道可以模拟 类,但我不确定它们是否被称为 类。也许你也有一些证据?

这些 类 只是伪造的 类 还是它的正确术语是什么?

"class" is a term for many things. The classes you are looking for are a concept, and are certainly used in JavaScript. We implement the concept by reification, which is easily possible with JavaScripts powerful, object-oriented prototype inheritance。这个模型与其他编程语言中使用的对象模型有很大不同,在其他编程语言中,classes 更像是一个编译器工件,而不是具体的对象。

这个概念是通过通用语言特性实现的,允许多个略有不同的实现(其中一些甚至不依赖原型)。所以当 "class" 这个词被使用时,我们不知道它到底是什么样子。只有当我们引用特定的 class 实现时,才清楚结构的含义(假设您熟悉实现的种类)。
然而,有一个非常标准的模式(实现),带有一个构造函数,用 new 调用来创建实例,以及一个用于共享方法的原型对象。该模式还定义了如何设置继承和 subclassing.

你是对的,ES5 中没有句法 class 结构(尽管关键字是保留的,并且在 ES6 中由标准结构实现)。

JavaScript/ECMAScript 是一种 prototype-based 编程语言。

维基百科对此的定义是:

Prototype-based programming is a style of object-oriented programming in which behaviour reuse (known as inheritance) is performed via a process of cloning existing objects that serve as prototypes. This model can also be known as prototypal, prototype-oriented, classless, or instance-based programming.

好吧,要知道是否称呼它们是您的决定 classes

但是 JS 世界中的一些人称它们为 classes 并且在 ECMAScript 6 中将有一个关键字来创建这样的原型,称为 class。 (这意味着这些原型应该被称为 class。)


由于您正在撰写论文,因此您可以定义 class(那里有一些),提及您使用的定义以及它是否适用于 JavaScript。 (如果那以某种方式属于你的工作。)

class 的一些定义也总结在 John C. Mitchell 的一本好书中。 (米切尔,约翰:编程语言中的概念。剑桥大学出版社,2003 年。)

在 Simula 中的 classes 上,他写道:(第 326 页)

Class: A Simula class is a procedure that returns a pointer to its activation record. The body of a class may initialize the object it creates.

classes 上,他在 Smalltalk 中写道:(第 327 页)

Class: A Smalltalk class defines class variables, class methods, and the instance methods that are shared by all objects of the class. At run time, the class data structure contains pointers to an instance variable temple, a method dictionary, and the superclass.

他还指出 classes 在 Java 和 C++ 中的概念与 Smalltalk 中的概念非常相似,后者是 OO 的先驱.

我们可以看到class可以有不同的定义,但是上面的两种定义似乎都不太符合Java脚本原型。

来自MDN

JavaScript classes are introduced in ECMAScript 6 and are syntactical sugar over JavaScript's existing prototype-based inheritance.

您可以通过一些编译器在 ES5 中使用这个新结构: