JavaScript 类(Classes)
JavaScript 类(Classes)是用于创建对象的蓝图或模板。它们封装数据并函数来操作该数据。我们可以使用 classes 创建对象。从类创建对象称为实例化类。在 JavaScript 中,类是建立在原型之上的。这些类在 2009 年的 ECMAScript 6 (ES6) 中被引入 JavaScript。
例如,您可以考虑编写代码来表示 car 实体。代码可以包含具有 car 属性的类。对于不同的汽车,您可以创建类的实例,并根据汽车型号初始化汽车属性。
在 ES6 之前,构造函数用于定义对象的蓝图。您可以定义 constructor 函数,如下所示。
定义 JavaScript 类
该类的语法与 constructor 函数非常相似,但它使用 'class' 关键字来定义类。由于我们可以使用函数声明或函数表达式来定义函数,因此也可以使用类声明或类表达式来定义类。
语法
JavaScript 中类定义的语法如下 -
'ClassName' 是上述语法中的类名。
JavaScript 类的类型
JavaScript 类是一种函数。在下面的示例中,我们使用 'typeof' 运算符来获取类的类型。它返回 'function',你可以在输出中观察到它。
输出
constructor() 方法
当您将函数用作对象蓝图时,您可以初始化函数体内的对象属性。同样,您需要将 constructor() 方法与类一起使用来初始化对象属性。
每当创建类的实例时,它都会自动调用该类的 constructor() 方法。
在下面的示例中,我们使用 constructor() 方法创建一个 Car 类 -
constructor() 方法没有具体名称,但可以使用 'constructor' 关键字创建。您可以在 constructor 函数中使用 'this' 关键字初始化类属性。
创建 JavaScript 对象
要创建 JavaScript 类的对象,我们使用 new 运算符,后跟类名和一对括号。我们也可以将参数传递给它。
让我们创建一个名为 myCar 的对象,如下所示 -
构造函数中的 this 关键字引用正在执行当前函数的对象。
示例:创建不带参数的类对象
在下面的示例中,我们定义了 'Car' 类。该类包含构造函数并使用默认值初始化属性。
之后,我们创建了类的实例,您可以在输出中观察到它。
输出
Car model is : X5
Car year is : 2019
如果要动态初始化类属性,则可以将参数与 constructor() 方法一起使用。
示例:使用参数创建类对象
在下面的示例中,我们定义了 'Car' 类。该类的 constructor() 方法接受 4 个参数,并使用参数值初始化类属性。
在创建 'Car' 类实例时,我们传递了 4 个参数。通过这种方式,您可以动态地初始化类属性。
输出
Car model : X5
Car price : 9800000
Car year : 2019
JavaScript 类方法
您还可以在类中定义方法,这些方法可以使用类实例进行访问。
语法
按照下面的语法定义类中的方法。
在上面的语法中,'methodName' 是方法的动态名称。要定义类方法,您无需在方法名称前编写任何关键字(如 'function)。
要调用类方法,您需要使用类的实例。此处,'obj' 是类的实例。您还可以将参数传递给该方法。
例下面的示例演示了如何将参数传递给类 methods。
在这里,我们定义了 updateprice() 方法来更新汽车的价格。因此,在调用 updateprice() 方法时,我们将新价格作为参数传递,并在方法主体中使用它来更新价格。
您可以在输出中看到汽车的原始价格和更新价格。
输出
After updating the car price is : 8800000
JavaScript 类(Classes)提升
在 JavaScript 中,类(Classes) 的声明不会提升到代码的顶部。因此,在使用类之前,您始终需要定义该类。
您可以尝试运行上述代码。它将生成引用错误,因为在初始化之前使用了 car 类。
Classes 的 Strict 模式
严格模式用于避免异常错误。默认情况下,类代码始终处于 strict 模式。
让我们通过下面的示例来理解它。
在上面的代码中,我们在 constructor() 方法中定义了 'num' 全局变量。在 JavaScript 的 strict 模式下,不允许在不使用 var、let 或 const 关键字的情况下定义变量。因此,上面的代码将引发错误。