我正在阅读来自 Microsoft 的名为TypeScript的新的类似 JavaScript 的语言。在Playground(示例部分)中,有一个 TypeScript 语法转换为 JavaScript 代码的简单类。来自 Java 编程背景,学习如何在 JavaScript 中完成从 TypeScript 编译的 OOP 对我来说很有趣。
打字稿代码:
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;
};
每种方法的优点/缺点是什么?