17 Stimmen

Warum das JavaScript-Klasse in einem anonymen function() Aufruf einbinden?

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?

-4voto

Thinol Punkte 45

Der Abschluss ist das einzige Mittel, um die Konstruktoren mit Parametern aufzurufen:

var w = new Greeter("hello")

Es gibt zwar andere Methoden, aber alle sind kompliziert und mit Einschränkungen und Nachteilen verbunden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X