在 ES2015 中,引入了 Class 关键字用于定义类,更好地支持面向对象编程。Class 在语法上更具可读性,同时也有着更完整,更严格的语义。它不仅提供了现有的原型继承方式的一个替代,而且使面向对象编程变得更加容易理解和实现。
Class 基础语法
下面是一个简单的 Class 示例:
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - ------- - ---------------- -- ---- -- ------------- - -- ----------- ----- ------ - - ----- ---- - --- -------------- ---- ------------- -- --- -- ---- -- ----- - -- -- ----- ----
这里我们定义了一个名为 Person
的类,它有两个属性 name
和 age
,两个方法 constructor
和 greet
。属性是定义在实例上的,而方法是定义在原型上的。
在 Class 中,我们使用 constructor
方法来构造实例对象,同时也可以在该方法中初始化实例属性。这个方法在实例化时自动调用。
实例的方法是通过原型实现的,因此它们只存在于类的原型对象中,而不是每个对象的实例本身上。
console.log(john.constructor === Person); // true console.log(john instanceof Person); // true console.log(Person.prototype === john.__proto__); // true
继承
Class 还支持继承功能,让我们可以轻松地构建出有层次关系的 Class。
-- -------------------- ---- ------- ----- ------ - -------------------- - ------------ - -------- -- ---- - ------ - -- ---- ---------------- --------------- --------- - - ----- ---- ------- ------ - ----------------- -------- - --------------- -- ----------- ------- -- --------- - ----- - ----- - -- ---- ---------------------------- --- ------- - - ----- ----- - --- ------------- ----- -- ------- ------------- -- --- ---- -- ---- ------ ------------ -- ---- -- ---- --- ---- ----------------- ---------- -------- -- ---- ----------------- ---------- ------ -- ----
这里,我们定义了一个名为 Animal
的基类,并让 Bird
继承了 Animal
,通过 super
关键字调用了基类构造方法。我们给 Bird
定义了一个额外的属性 name
和一个方法 fly
。
我们创建了一个实例 eagle
,并调用了它从基类继承来的 move
方法和自己具有的 fly
方法。
静态方法
Class 还支持在类上定义方法,而不需要实例化一个对象。这些方法被称为静态方法,它们不允许被实例化对象调用,而只能被类自身调用。
-- -------------------- ---- ------- ----- ----- - -------------- -- - ------ - -- ------ - -- - ------ ----------- -- - -- ---- ----- -- - --- - ---- ----- -- - --- - ---- ------ ------------ - -- - -- - ---- - - ----- -- - --- -------- --- ----- -- - --- -------- --- ------------------------------ ----- -- -
这里,我们定义了一个叫做 distance
的静态方法,通过 Point.distance
调用它。
总结
Class 是 ES2015 中新增加的一个功能,它提供了更具可读性和更严格的语义。它能够帮助我们更好地支持面向对象编程。我们可以使用它来定义类,实现继承,定义静态方法等。这种新语法不仅可以使代码更加简洁,而且可以使代码更具可读性,使其更容易维护和重构。
当然,你也可以不使用 Class,使用定义构造函数和扩展原型的方式来实现面向对象编程,但是 Class 语法带来的更完整,更严格的语义可以使得程序更加易于理解、维护和扩展。
以上就是 ES2015 中 Class 的基础语法和应用示例,希望能够帮助你更好地理解和掌握。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647d7470968c7c53b083de9e