Ich habe über die neue von Microsoft namens TypeScript gelesen. Im Spielplatz (Beispielbereich) gibt es eine einfache Klasse in TypeScript-Syntax, die in JavaScript-Code umgewandelt wurde. Da ich aus einem Java-Programmierhintergrund komme, fand ich es interessant zu lernen, wie OOP in JavaScript als von TypeScript übersetzt ausgeführt wird.
Der TypeScript-Code:
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("Welt");
var button = document.createElement('button')
button.innerText = "Sag Hallo"
button.onclick = function() {
alert(greeter.greet())
}
document.body.appendChild(button)
Und der entsprechende JavaScript-Code:
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
var greeter = new Greeter("Welt");
var button = document.createElement('button');
button.innerText = "Sag Hallo";
button.onclick = function () {
alert(greeter.greet());
};
document.body.appendChild(button);
Der TypeScript-Teil ähnelt sehr Java, also verstehe ich das. Jetzt ist meine Frage, warum in JavaScript der Körper der Greeter
-Klasse in einem anonymen function()
-Aufruf eingebettet ist?
Warum nicht so schreiben?
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
Was sind die Vor- und Nachteile der beiden Methoden?