在 JavaScript 中,使用 new
关键字可以创建一个用户自定义对象类型的实例。这个过程包括以下步骤:
- 创建一个新的空对象。
- 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)。
- 执行构造函数中的代码(给这个新对象添加属性)。
- 返回新对象。
构造函数
构造函数是一种特殊的函数,主要用来初始化对象。构造函数的命名通常首字母大写,以便与普通函数区分开来。
function Person(name, age) { this.name = name; this.age = age; } const person1 = new Person('Alice', 25); console.log(person1.name); // 输出 "Alice" console.log(person1.age); // 输出 25
构造函数的注意事项
- 构造函数内部没有 return 语句时,默认返回的是 this 指向的对象。
- 如果构造函数有 return,并且返回值是一个原始类型,那么这个返回值会被忽略;如果返回值是一个引用类型,那么这个返回值会被作为构造函数的返回值。
-- -------------------- ---- ------- -------- ------------- - ---------- - ---- ------ --- -- ------ - ----- -------- - --- -------------- ---------------------------- -- -- --- -------- -------------- - ---------- - ---- ------ - ------ --- -- -- ------ - ----- --------- - --- --------------- ----------------------------- -- -- -------------- - ------ --- -
类的定义
ES6 引入了 class
关键字,使得定义类变得更加直观和简单。尽管类本质上是基于原型的继承,但它们提供了一种更接近于面向对象编程的语言风格。
定义类
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - ------- - ------------------------- ----- - --------- - - ----- --- - --- -------------- ------------ -- -- ---- ----- - -------
类的方法
类的方法默认都是可枚举的,并且默认不是可配置的、不可写的。如果需要修改这些行为,可以通过 Object.defineProperty 方法进行设置。
-- -------------------- ---- ------- ----- --- - ----------------- - --------- - ----- - ------- - ------------------------- --------- - - ------------------------------------ -------- - --------- ------ ------------- ----- --- ----- --- - --- ----------- ------------ -- -- ---- ------- -- ------------ ------------------- - ---------- - ---------------- --------- --
静态方法
静态方法是属于类本身而不是类的实例的方法。它们不能通过实例调用,只能通过类名调用。
-- -------------------- ---- ------- ----- ---- - ----------------- - --------- - ----- - ------ ----- - ----------------- -- ---------- - - ----- ------- - --- ---------------- ----------- -- -- ----- -- -------- -------------- -- -------------- -- --- - --------
继承
类可以通过 extends
关键字实现继承,从而复用父类的功能。
-- -------------------- ---- ------- ----- --- ------- ------ - ----------------- ------ - ------------ -- --------- ---------- - ------ - ------ - ------------------------- --------- - - ----- ----- - --- ------------ ------- ------------ -------------- -- -- ------ ----- - ------- ------------- -- -- ------ -------
覆盖方法
子类可以覆盖父类的方法。
-- -------------------- ---- ------- ----- ------ ------- ------ - ----------------- ------ - ------------ ---------- - ------ - ------- - ------------------------- ----------- - - ----- ------ - --- --------------- --------- --------------- -- -- ------ ---------
super 关键字
super
关键字用于调用父类的方法。在子类构造函数中,必须先调用 super()
,然后才能使用 this
关键字。
-- -------------------- ---- ------- ----- ---- ------- ------ - ----------------- ------ - ------------ ---------- - ------ - ------- - ------------------------- ---------- - ------- - -------------- -- ----- ----- -- ---------------- ------------ ---------- - - ----- ---- - --- -------------- ---------- ------------- -- -- ------- ----- - ------- - ---- ------ --------
总结
本章介绍了如何使用 new
关键字创建类实例,以及如何定义和使用类、继承和静态方法等。理解这些概念对于掌握现代 JavaScript 编程至关重要。在接下来的内容中,我们将继续深入探讨其他相关主题。