В js по-умолчанию this в исполняемой функции - текущий контекст. На примере, если просто выполнить функцию onReady, то ее контекст (this) будет функция setTimeout. Это решается 3 вариантами:
1. Если доступно замыкание, то
....
this.run = function() {
var self = this;
setTimeout(function onReady() {
self.doSomething();
}, getTimeToBoil());
};
.....
2. пример с .bind(this)
3. Используем es2015 arrow function, где this не перезаписывается, а берется из замыкания
....
this.run = function() {
setTimeout(() => {
this.doSomething();
}, getTimeToBoil());
};
.....