1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
interface Delegate {
(message : string): void
}
interface Delegate1 {
() : void
}
export class Timer {
private _func : Delegate
private _func1 : Delegate1
// private _self : object
constructor(del : Delegate, message : string, del1 : Delegate1) {
this._func = del
this._func1 = del1
this.execute(message) // test delegate simple
this.exeF1() // test delegate avec besoin de modification d'état de la classe B
}
execute(mess : string) {
console.log("execute()")
this._func(mess)
}
exeF1() {
console.log("F1()")
this._func1() // <----- appel de la fonction via le "delegate". On appel ici B.calledF1()
}
}
class B {
private timer : Timer
private _count : number = 0
private nameTest : string = "bonjour"
constructor() {
console.log("entering class B")
this.timer = new Timer(this.called, "it woks !", this.calledF1)
this._count = 0
}
getCount() {
return this._count
}
incCount() {
this._count++
this.test()
}
called(message : string) {
console.log("into call() with message :", message)
this._count += 1
}
calledF1() { // appel depuis Timer.func1()
this._count += 5 // <------------ ici this._count n'est pas modifié car inconnu de la classe Timer.
console.log("counter calledF1() =",this._count) // ---> this._count vaut Nan
}
print() {
console.log("valeur de count : "+this._count)
}
}
console.log("create new object B")
const b = new B()
b.print() // <--- out = 0
b.incCount()
console.log("count :",b.getCount()) // <---out = 1 |