在 JavaScript 中,我们经常需要创建类来组织代码,以便更好地管理和维护代码。ES9 引入了一些新的语法和特性来增强类的功能,其中包括静态成员和实例成员。
静态成员
静态成员是指与类本身相关联的成员,而不是与类的实例相关联的成员。它们可以被所有实例共享,也可以通过类本身进行访问。静态成员通常用于保存与类本身相关的数据或方法。
定义静态成员
在 ES9 中,可以使用 static
关键字来定义静态成员。下面是一个简单的示例:
class MyClass { static myStaticProp = "hello"; static myStaticMethod() { console.log("world"); } }
在这个示例中,我们定义了一个名为 MyClass
的类,并添加了一个静态属性 myStaticProp
和一个静态方法 myStaticMethod
。这意味着我们可以通过类本身来访问它们:
console.log(MyClass.myStaticProp); // "hello" MyClass.myStaticMethod(); // "world"
使用静态成员
静态成员可以在类的实例中使用,但是需要使用类本身来访问它们。例如,我们可以在类的构造函数中使用静态成员:
class MyClass { static myStaticProp = "hello"; constructor() { console.log(MyClass.myStaticProp); } }
在这个示例中,我们定义了一个名为 MyClass
的类,并在构造函数中访问了静态属性 myStaticProp
。当我们创建实例时,它将输出 "hello"
:
const myObj = new MyClass(); // "hello"
静态成员的继承
子类可以继承父类的静态成员。例如:
-- -------------------- ---- ------- ----- ------ - ------ ---------- - --------- ------ --------------- - ------ ---------------- - - ----- --- ------- ------ - ------ ---------- - ------ - --------------------------------- -- -----
在这个示例中,我们定义了一个名为 Animal
的类,并添加了一个静态属性 animalType
和一个静态方法 getAnimalType
。然后,我们定义了一个名为 Dog
的子类,并覆盖了 animalType
属性。最后,我们通过子类调用父类的静态方法 getAnimalType
,它将输出 "Dog"
。
实例成员
实例成员是指与类的实例相关联的成员。它们只能通过类的实例进行访问。实例成员通常用于保存与实例相关的数据或方法。
定义实例成员
在 ES9 中,可以在类的构造函数中使用 this
关键字来定义实例成员。下面是一个简单的示例:
class MyClass { constructor() { this.myInstanceProp = "hello"; } myInstanceMethod() { console.log("world"); } }
在这个示例中,我们定义了一个名为 MyClass
的类,并添加了一个实例属性 myInstanceProp
和一个实例方法 myInstanceMethod
。这意味着我们只能通过类的实例来访问它们:
const myObj = new MyClass(); console.log(myObj.myInstanceProp); // "hello" myObj.myInstanceMethod(); // "world"
使用实例成员
实例成员只能在类的实例中使用。例如,我们可以在类的构造函数中访问实例成员:
class MyClass { constructor() { console.log(this.myInstanceProp); } myInstanceMethod() { console.log("world"); } }
在这个示例中,我们定义了一个名为 MyClass
的类,并在构造函数中访问了实例属性 myInstanceProp
。当我们创建实例时,它将输出 undefined
,因为我们尚未为属性赋值:
const myObj = new MyClass(); // undefined myObj.myInstanceProp = "hello"; console.log(myObj.myInstanceProp); // "hello"
实例成员的继承
子类可以继承父类的实例成员。例如:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - ------- - --------------------- - - ----- - --------- - - ----- --- ------- ------ - ----------------- - ------------ - ------- - --------------------- - - --------- - - ----- - - --- -------------- ---------- -- ------- -------
在这个示例中,我们定义了一个名为 Animal
的类,并添加了一个实例属性 name
和一个实例方法 speak
。然后,我们定义了一个名为 Dog
的子类,并覆盖了 speak
方法。最后,我们创建了一个 Dog
类的实例,并调用它的 speak
方法,它将输出 "Mitzie barks."
。
结论
ES9 引入了静态成员和实例成员,增强了 JavaScript 中类的功能。静态成员与类本身相关联,可以被所有实例共享,而实例成员与类的实例相关联,只能通过类的实例进行访问。这些新特性可以帮助我们更好地组织和管理代码,并提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67453b94c1a23897ea8dc60f