Зачем вставлять класс 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;
};
В чем преимущество / недостаток каждого метода?