Prototyping und Klassen
Modul #F4 - JavaScript - Prototypen und Klassen.
JavaScript ist Prototyp-basierende Programmiersprache
JavaScript ist eine prototype-basierte Programmiersprache, was bedeutet, dass die Vererbung und die Erstellung von Objekten auf Prototypen basieren.
Ein Prototyp ist ein vordefiniertes Objekt, das als Vorlage für die Erstellung neuer Objekte dient. Wenn ein neues Objekt erstellt wird, erbt es automatisch Eigenschaften und Methoden von seinem Prototypen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // create Object-Prototyp
const personProto = {
name: '',
age: 0,
speak: function() {
console.log('Hello World!');
}
}
// create new object based on prototyp
const person1 = Object.create(personProto)
person1.name = 'John'
person1.age = 30
// Erstellen eines weiteren Objekts basierend auf dem Prototypen
const person2 = Object.create(personProto)
person2.name = 'Jane'
person2.age = 25
console.log(person1) // { name: "John", age: 30 }
console.log(person2) // { name: "Jane", age: 25 }
person1.speak() //'Hello World!'
|
Klassen in JavaScript
Es gibt in JavaScript das Konzept von Klassen, das in der objektorientierten Programmierung verwendet wird.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| // Klasse
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
sayHello() {
console.log('Hello, my name is ' + this.name)
}
}
// Eine Instanz der Klasse erstellen
const person = new Person('Max', 30)
// Eine Methode der Klasse aufrufen
person1.sayHello() // Hello, my name is Max
|
static Methods
Es gibt auch hier statische Methoden, welche in Klassen definiert werden, um Methoden aufzurufen, die nicht an eine bestimmte Instanz der Klasse gebunden sind, sondern direkt auf der Klasse selbst aufgerufen werden können.
Statische Methoden sind oft nützlich, um Hilfsfunktionen in einer Klasse zu definieren, die nicht auf eine bestimmte Instanz der Klasse angewiesen sind. Sie können auch verwendet werden, um Konstruktoren in einer Klasse zu definieren, die nur einmal ausgeführt werden müssen, unabhängig davon, wie viele Instanzen der Klasse erstellt werden.
Statische Methoden werden mit static
vor der Methodendefinition gekennzeichnet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| class Person {
constructor(name, age) {
this.name = name
this.age = age
}
sayHello() {
console.log('Hello, my name is ' + this.name)
}
static sayBye() {
console.log('Bye Bye')
}
}
const person = new Person('Max', 30)
console.log(person.name) // Max
console.log(person.age) // 30
person.sayHello() // Hello, my name is Max
Person.sayBye() // Bye Bye
|
Natürlich kann eine Klasse auch von einer anderen Erben (extends):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| class Person {
constructor(name, age) {
this.name = name
this.age = age
}
}
class Student extends Person {
constructor(name, age, major) {
super(name, age)
this.major = major
}
}
const person = new Person('Max', 30)
const student = new Student('John', 20, 'Computer Science')
console.log(person.name) // Max
console.log(person.age) // 30
console.log(student.name) // John
console.log(student.age) // 20
console.log(student.major) // Computer Science
|
typeof vs instanceof bei Klassen
Es gibt zwei Möglichkeiten, den Typ von Objekten zu überprüfen: der typeof
Operator und der instanceof
Operator. Wenn es um Klassen geht, haben beide ihre eigenen Anwendungen und Unterschiede:
typeof
wird verwendet, um den Typ eines Werts zu überprüfen. Wenn eine Klasse definiert wird, wird ihr Typ als “function” zurückgegeben. Für eine Instanz wird “object” zurückgegeben.
1
2
3
4
5
6
7
8
9
10
11
| class Person {
constructor(name, age) {
this.name = name
this.age = age
}
}
const person = new Person('Max', 30);
console.log(typeof Person); // "function"
console.log(typeof person); // "object"
|
instanceof
wird verwendet, um zu überprüfen, ob eine Instanz einer bestimmten Klasse angehört.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class Person {
constructor(name, age) {
this.name = name
this.age = age
}
}
class Student extends Person {
constructor(name, age, major) {
super(name, age)
this.major = major
}
}
const person = new Person('Max', 30)
const student = new Student('John', 20, 'Computer Science')
console.log(student instanceof Person) // true
console.log(student instanceof Student) // true
console.log(person instanceof Student) // false
|
Last modified October 25, 2023:
fix feedbacks for F4 (6d840922)