Stavo leggendo il nuovo linguaggio simile a JavaScript di Microsoft chiamato TypeScript. Nello playground (example section), esiste una semplice classe nella sintassi TypeScript convertita nel codice JavaScript. Provenendo da uno sfondo di programmazione Java, è stato interessante per me imparare come OOP è fatto in JavaScript come compilato da TypeScript.Perché incorporare la classe JavaScript in una chiamata anonimo()?
Il codice dattiloscritto:
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)
E il codice 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);
il dattiloscritto parte è molto simile a Java così ho capito che. Ora la mia domanda è: perché in JavaScript il corpo della classe Greeter
è incorporato in una chiamata anonima function()
?
Perché non scrivere in questo modo?
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function() {
return "Hello, " + this.greeting;
};
Qual è il vantaggio/svantaggio di ciascun metodo?
Questo codice JavaScript non fa alcun uso particolare della funzione anonima immediatamente invocata. Hai ragione, potrebbe essere rimosso. –
Ho pensato che fosse per i membri 'private', ma ... l'aggiunta di' private' non cambia nulla. –