跳至正文
首页 » 博客 » Easy JavaScript Part 10: Class in JavaScript?

Easy JavaScript Part 10: Class in JavaScript?

ECMAScript 6引入了class关键字来在JavaScript中创建类。现在,您可以使用class属性在JavaScript中创建一个类。在ECMA 6之前,每当您使用new运算符调用函数时,该函数都会返回一个新对象。因此,该函数充当类并称为构造函数。这种调用函数返回对象的方式也称为构造函数调用模式 (Constructor Invocation Pattern)。

但在ECMAScript 6中,可以使用class关键字创建类。考虑下面的代码:

汽车

 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;} getInfo () {控制台日志(制造者 "费用:" 价格);}}

在上面的代码片段中,您使用ECMAScript 6 class关键字创建了一个名为Car的。您还可以创建Car类的对象,如下所示:

var car1 = 汽车 (100“宝马” );car1getInfo();var car2 = 汽车 (150“奥迪” );car2getInfo (); 

JavaScript类是通常基于原型的继承的简化语法。它没有提供任何新的对象创建或原型继承方式,也没有在JavaScript中引入任何面向对象或继承的新模型。你可以说一个类是一个特殊的函数来创建对象。

类声明和表达式

由于JavaScript中的class属性也像一个函数,因此也可以通过使用类声明和类表达式来创建它。您可以使用类声明创建一个类,如下所示:

汽车

 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;}getInfo () {控制台日志(制造者 "费用:" 价格);}} 

也可以使用类表达式创建类。您可以创建命名或未命名的类表达式。可以创建命名类表达式,如下所示:

var Car = class { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;}getInfo () {控制台日志(制造者 "费用:" 价格);}toString () {返回 '$ {.maker} 成本: $ {这.price}';}}

可以创建一个未命名的类表达式,如下所示。为类表达式指定的名称是类主体的本地名称。

Car

var = c {constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;}getInfo () {控制台日志(制造者 "费用:" 价格);}toString () {返回 '$ {.maker} 成本: $ {这.price}';}}

吊装类

如前所述,可以将类创建为声明和表达式,但是与函数声明不同,类声明不会被提升到执行上下文的顶部。考虑下面的代码:

var car1 = 汽车 (10 “宝马” ); // 引用错误console.log (car1.toString ()); 汽车等级 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;} getInfo () {控制台日志(制造者 "费用:" 价格);} toString () {返回 '$ {.maker} 成本: $ {这.price}';}} 

上面的代码将抛出ReferenceError, 这是因为你试图在声明之前访问一个类。因此,我们可以总结一下,函数声明被提升,而类声明没有被提升。

类方法

JavaScript类中有三种类型的方法:

  1. 构造函数方法
  2. 静态方法
  3. 原型法

类构造函数方法创建一个initialize对象。一个类只能有一个构造函数方法。如果您尝试创建多个构造函数方法,JavaScript将引发异常。可以使用关键字constructor创建构造函数 ,如下面的代码所示:

汽车

 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;}} 

JavaScript类静态方法是用类调用的,而不是用类的特定对象调用的。如果您尝试使用类的实例调用它们,JavaScript将抛出异常。可以使用关键字static创建静态方法,如下面的清单所示:

汽车

 {() 静态计数 {控制台日志(“我是静态方法”);} } 汽车计数();汽车计数(); 

如果您尝试使用实例调用静态方法,JavaScript将抛出异常,说明该函数不存在。另外,请记住,JavaScript类没有静态属性或成员。到目前为止,它只支持静态方法。

使用类的实例访问的任何常规方法都称为原型方法。这些方法可以继承并与类的对象一起使用。

汽车

 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;} getInfo () {控制台日志(制造者 "费用:" 价格);}} var car1 = 汽车 (10“BMW” );car1getInfo (); 

在上面的代码片段中,getInfo() 是Car类的原型方法。正如您所看到的,我们将它与Car类的实例一起使用。由于它是一种原型方法,因此它也可以被继承。让我们探索为什么这些方法被称为原型方法。首先,考虑下面的代码:

汽车

 { constructor (maker,price) {这个.制造者 = 制造者;这个.价格 = 价格;} getInfo () {控制台日志(制造者 "费用:" 价格);}} 控制台日志(typeof(汽车));// 函数

在这里,我们输入一个typeof Car类,我们得到一个打印的函数输出。正如你所看到的,这个类只不过是一个函数类型,所以像任何其他函数一样,它也有一个原型属性。这些常规方法是类的原型对象的方法,因此它们被称为原型方法。它们可以通过坚持基于原型的继承来继承。

除了这三种类型的方法,JavaScript还有一些叫做getter和setter的东西,你可以在这里学习。

结论

在这篇文章中,我们简要介绍了ECMAScript 2015中引入的JavaScript class属性。使用class关键字,您可以创建一个类,但请记住,这不会引入新的对象创建或继承方式。相反,对于相同的对象和基于原型的继承,这只是一个更简单的语法。

在下一篇文章中,我们将深入探讨使用class和extends关键字的继承。同时,不要忘记查看Ignite UI for JavaScript/HTML5和ASP.NET MVC ,您可以将其与HTML5,Angular,React和ASP.NET MVC一起使用来创建富Internet应用程序。您可以免费下载试用版我们所有的JavaScript控件!

</p