在TypeScript中,我似乎無法在沒有編譯器將其添加到原型的類中聲明函數。例如:爲什麼我不能在TypeScript類中聲明局部變量和函數?
class MyTypeScriptClass {
// method, is added to prototype
foo1(): void {
alert('invoked foo1');
}
// private method also added to prototype
private foo2(): void {
alert('invoked foo2');
}
//// can I have a local function, without making it a private method?
//function foo3() {
// alert('invoked foo3');
//}
}
以上編譯成這樣:
var MyTypeScriptClass = (function() {
function MyTypeScriptClass() { }
MyTypeScriptClass.prototype.foo1 = function() {
alert('invoked foo1');
};
MyTypeScriptClass.prototype.foo2 = function() {
alert('invoked foo2');
};
return MyTypeScriptClass;
})();
我所尋找的是打字稿,可以編譯爲以下JavaScript:
var fvm = new FlasherViewModel2();
var MyTypeScriptClass = (function() {
function MyTypeScriptClass() { }
MyTypeScriptClass.prototype.foo1 = function() {
alert('invoked foo1');
};
MyTypeScriptClass.prototype.foo2 = function() {
alert('invoked foo2');
};
function foo3() {
alert('invoked foo3');
}
return MyTypeScriptClass;
})();
能不能做到?
(作爲附帶說明,我知道foo3不會從外部代碼調用。我想實際上是從類中的另一方法調用foo3,例如,到功能傳遞給一個jQuery淡出。)
你想要一個只有特定類的實例才能訪問的私有函數嗎?這聽起來像一個'私人靜態',這是不可能的根據[這個答案](http://stackoverflow.com/questions/12827544/private-static-properties-in-typescript)。如果你想讓'foo3'公開,那麼簡單地將它變成一個靜態的工作? – apsillers
是的,我正在尋找一個只能被實例訪問的私有函數。感謝您的鏈接和澄清。我能夠通過使用指針函數(lambda)實現相同的目標,因爲我試圖處理的問題是在內部作用域函數中失去外部'this'引用。 – danludwig