gpt4 book ai didi

javascript - 如何在 JavaScript 中创建抽象基类?

转载 作者:IT王子 更新时间:2023-10-29 02:42:06 28 4
gpt4 key购买 nike

是否可以在 JavaScript 中模拟抽象基类?最优雅的方法是什么?

说,我想做这样的事情:-

var cat = new Animal('cat');
var dog = new Animal('dog');

cat.say();
dog.say();

它应该输出:'bark', 'meow'

最佳答案

JavaScript 类和继承 (ES6)

根据 ES6,您可以使用 JavaScript 类和继承来完成您需要的。

JavaScript classes, introduced in ECMAScript 2015, are primarily syntactical sugar over JavaScript's existing prototype-based inheritance.

引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

首先,我们定义抽象类。此类不能实例化,但可以扩展。我们还可以定义必须在扩展该类的所有类中实现的函数。

/**
* Abstract Class Animal.
*
* @class Animal
*/
class Animal {

constructor() {
if (this.constructor == Animal) {
throw new Error("Abstract classes can't be instantiated.");
}
}

say() {
throw new Error("Method 'say()' must be implemented.");
}

eat() {
console.log("eating");
}
}

之后,我们可以创建具体的类。这些类将继承抽象类的所有功能和行为。

/**
* Dog.
*
* @class Dog
* @extends {Animal}
*/
class Dog extends Animal {
say() {
console.log("bark");
}
}

/**
* Cat.
*
* @class Cat
* @extends {Animal}
*/
class Cat extends Animal {
say() {
console.log("meow");
}
}

/**
* Horse.
*
* @class Horse
* @extends {Animal}
*/
class Horse extends Animal {}

结果...

// RESULTS

new Dog().eat(); // eating
new Cat().eat(); // eating
new Horse().eat(); // eating

new Dog().say(); // bark
new Cat().say(); // meow
new Horse().say(); // Error: Method say() must be implemented.

new Animal(); // Error: Abstract classes can't be instantiated.

关于javascript - 如何在 JavaScript 中创建抽象基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com