вы должны использовать:
this.WaitAndSayHello.call(this);
или
this.WaitAndSayHello.apply(this);
Разница между apply
и call
заключается в способе передачи аргументов вызываемой функции: представьте, WaitAndSayHello
получил несколько аргументов:
this.WaitAndSayHello = function(toWho, helloMessage){
...
}
с call
, вы будете передавать аргументы после контекста, как обычно вызываете функцию:
this.WaitAndSayHello.call(this, 'Bob', 'Hello');
с apply
вы должны передать аргументы в виде массива:
this.WaitAndSayHello.apply(this, ['Bob', 'Hello']);
Редактировать
Извините, я неправильно прочитал ваш код, @ jAndy's действительно правильный, но, используя мою логику, вы могли бы сделать что-то вроде:
this.WaitAndSayHello = function() {
setTimeout.call(this, function() {
console.log(this)
this.SayHello() // Fails
}, 500);
}