Зачем вставлять класс JavaScript в анонимный вызов функции ()?

Я читал о новом JavaScript-подобном языке от Microsoft под названиемМашинопись, вдетская площадка (пример раздела)в синтаксисе TypeScript есть простой класс, преобразованный в код JavaScript. Исходя из опыта программирования на Java, мне было интересно узнать, как ООП выполняется в JavaScript, скомпилированном из TypeScript.

Код TypeScript:

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}   

var greeter = new Greeter("world");

var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
    alert(greeter.greet())
}

document.body.appendChild(button)

И эквивалентный код JavaScript:

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();
var greeter = new Greeter("world");
var button = document.createElement('button');
button.innerText = "Say Hello";
button.onclick = function () {
    alert(greeter.greet());
};
document.body.appendChild(button);

Часть Typescript очень похожа на Java, поэтому я понимаю это. Теперь мой вопрос, почему в JavaScript телоGreeter класс встроен в анонимныйfunction() вызов?

Почему бы не написать это так?

function Greeter(message) {
    this.greeting = message;
}
Greeter.prototype.greet = function () {
    return "Hello, " + this.greeting;
};

В чем преимущество / недостаток каждого метода?

Ответы на вопрос(6)

Ваш ответ на вопрос