2013-12-20 271 views
1

我是全新的打字稿,我有一個問題。我寫了下面的代碼:通過類傳遞函數

class FunctionMachine { 
name: string; 
constructor(_name: string) { 
    this.name = _name; 
} 
sayName() { 
    console.log(this.name); 
} 
sayNameWithCallback(callback){ 
    console.log(this.name); 
    callback(); 
} 
} 

var fmHans = new FunctionMachine("Hans"); 
var fmOle = new FunctionMachine("Ole"); 
fmOle.sayName(); 
fmHans.sayNameWithCallback(fmOle.sayName); 

我希望它在編寫「Ole,Hans,Ole」時運行。相反,它返回「Ole,Hans」。

它看起來像「這個」。指的是當我使用fmOle.sayName作爲參數時,我所期望的以外的東西。

這不是在TypeScript中支持,還是我需要重寫我的代碼?

回答

1

在這種情況下,您需要保護範圍。有一招Ryan Cavanaugh之前提到過你用胖箭頭在班上做這個:

class FunctionMachine { 
    name: string; 
    constructor(_name: string) { 
     this.name = _name; 
    } 

    sayName =() => { // <-- This is the clever bit 
     console.log(this.name); 
    } 

    sayNameWithCallback(callback) { 
     this.sayName(); 
     callback(); 
    } 
} 

var fmHans = new FunctionMachine("Hans"); 
var fmOle = new FunctionMachine("Ole"); 

console.log('First Call'); 
fmOle.sayName(); 

console.log('Second Call'); 
fmHans.sayNameWithCallback(fmOle.sayName); 
+0

嗨,那裏,謝謝你的回覆。它像一個魅力:) 你能解釋我什麼是胖箭頭?它看起來像lambda表達式,因爲我從C#知道它們。 – user3122410

+0

它們的主要目的是保存範圍 - 您可以將它們用作動態創建函數的簡寫。 – Fenton