Estaba leyendo sobre el nuevo lenguaje similar a JavaScript de Microsoft llamado TypeScript. En el playground (example section), hay una clase simple en la sintaxis de TypeScript convertida en código JavaScript. Procedente de un fondo de programación Java, fue interesante para mí aprender cómo se hace OOP en JavaScript compilado a partir de TypeScript.¿Por qué incrustar la clase JavaScript en una función anónima llamada()?
El código mecanografiado:
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)
Y el código JavaScript equivalente:
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);
La imprenta parte es muy similar a Java por lo que entiendo eso. Ahora mi pregunta es ¿por qué en JavaScript el cuerpo de la clase Greeter
está incrustado en una llamada anónima function()
?
¿Por qué no escribir de esta manera?
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function() {
return "Hello, " + this.greeting;
};
¿Cuál es la ventaja/desventaja de cada método?
Ese código JavaScript no hace un uso particular de la función anónima invocada inmediatamente. Tienes razón, podría ser eliminado. –
Pensé que sería para miembros 'privados', pero ... agregar' private' no cambia nada. –