TypeScriptと呼ばれる Microsoft の新しい JavaScript に似た言語について読んでいました。プレイグラウンド (サンプル セクション)には、JavaScript コードに変換された TypeScript 構文の単純なクラスがあります。Java プログラミングのバックグラウンドを持つ私にとって、TypeScript からコンパイルされた JavaScript で OOP がどのように行われるかを学ぶことは興味深いことでした。
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;
};
各方法の長所/短所は何ですか?