我正在閱讀有關Microsoft提供的新類似JavaScript的語言TypeScript。在playground (example section)中,TypeScript語法中有一個簡單類轉換爲JavaScript代碼。從Java編程背景來看,學習從TypeScript編譯的JavaScript如何完成OOP是有趣的。爲什麼在匿名函數()調用中嵌入JavaScript類?
打字稿代碼:
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);
打字稿部分非常類似於Java,所以我理解這一點。現在我的問題是爲什麼在JavaScript中,Greeter
類的主體嵌入在匿名function()
調用中?
爲什麼不把它寫成這樣?
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function() {
return "Hello, " + this.greeting;
};
每種方法的優點/缺點是什麼?
JavaScript代碼沒有特別使用立即調用的匿名函數。你是對的,它可以被刪除。 –
我認爲這將是'私人'成員,但是......添加'私人'不會改變任何東西。 – 2012-10-02 14:32:56