Это потому, что вызовы AJAX асинхронны - они происходят в другое время, чем остальная часть контекста.
Попробуйте дать ему функцию обратного вызова (называемую обратным вызовом ниже).
LinkInfoGrabber.prototype.toLinkInfo = function(callback) {
$.ajax({
url: this.getRequestUrl(),
success: function(raw) {
callback( new LinkInfo(raw) );
},
error: function(jqXHR, textStatus, errorThrown) {
obj = new LinkInfoException(jqXHR, textStatus, errorThrown);
},
dataType: 'html'
});
}
var l = new LinkInfoGrabber()
l.toLinkInfo(console.log) //replace console.log with something meaningful
Хотя этот подход не дает точно такой же результат, как возможность вызова всего встроенного, он имеет то преимущество, что допускает асинхронную природу сети.