所以您创建了一个名为Test 的类,它是基类。您添加了一个名为 say() {} 的方法。
class Test {
say() {
console.log("I'm a test.");
}
}
然后您在下面创建了Test 类的实例:
let TestFromClass = new Test();
在下面,您创建了一个名为 TestFromObject 的纯 JavaScript 对象:
let TestFromObject = {
say() {
console.log("I'm also a test.");
}
};
是的,他们都会打印出你对他们方法的输出:
TestFromClass.say(); // Output: I'm a test.
TestFromObject.say(); // Output: I'm also a test.
在您充分利用所创建类的全部功能之前,差异不会开始,例如,像这样利用 cconstructor() 函数:
class Test {
constructor() {
}
say() {
console.log("I'm a test.");
}
}
现在,当我们使用 new 关键字作为类名时,会自动为我们调用构造函数。使用您知道的构造函数也可以访问this,如下所示:
class Test {
constructor() {
this.type = 'test';
}
say() {
console.log("I'm a test.");
}
}
这允许您这样做:
TestFromClass.say(); // Output: I'm a test.
TestFromObject.say(); // Output: I'm also a test.
TestFromClass.type; // Output: test
构造函数传统上用于在类或类的特定实例中进行一些初始设置。
构造函数通常在创建类的新实例时使用一些参数。也许您想指定您创建的 Test 类有 50 个问题。您可以像这样将一个对象传递给新的 Test 实例:
let TestFromClass = new Test({ questions: 50 });
您可以随意调用此对象,我们只需调用对象examination,您可以将问题数设置为此examination 对象。
所以现在你将该对象传递给构造函数并调用该对象,examination,如下所示:
class Test {
constructor(examination) {
this.questions = examination.questions;
this.type = 'test';
}
say() {
console.log("I'm a test.");
}
}
let TestFromClass = new Test({ questions: 50 });
TestFromClass.say(); // Output: I'm a test.
TestFromClass.type; // Output: test
TestFromClass.questions; // 50
您可以对类对象做的另一件事是创建一个可以扩展基类功能的子类,然后您还可以向它添加一些自定义功能。
class Test {
constructor(examination) {
this.questions = examination.questions;
this.type = 'test';
}
say() {
console.log("I'm a test.");
}
}
class Quiz extends Test {
}
所以现在您的测验继承了 Test 类中的所有方法、函数、属性等,并在其中定义了其他方法。
class Test {
constructor(examination) {
this.questions = examination.questions;
this.type = 'test';
}
say() {
console.log("I'm a test.");
}
}
class Quiz extends Test {
constructor(examination) {
this.topic = examination.topic;
}
}
所以现在为了确保父类的构造函数也被调用,我可以在构造函数中使用super()关键字:
class Test {
constructor(examination) {
this.questions = examination.questions;
this.type = 'test';
}
say() {
console.log("I'm a test.");
}
}
class Quiz extends Test {
constructor(examination) {
super(examination)
this.topic = examination.topic;
}
}
然后你可以像这样实例化那个子类:
const javascript = new Quiz({topic: 'javascript', questions: 50 });
最后打印出来:
javascript.questions; // Output: 50