Может быть, это проясняет:
В исходном коде:
function CurrentUser() {
// Do an ajax call to the server and get session data.
$.get("../../build/ajaxes/account/get_user_object_data.php", function(data) {
this.userId = data.userId;
console.log(data.userId); // This will correctly output "1".
}, "JSON");
}
Вы создаете анонимную функцию на лету, которая позже будет вызываться внутренними компонентами jQuery с this
установить объект AJAX. Таким образом, this
будет объектом ajax внутри анонимной функции, а не billybob
. Так когда
you do this.userId = ...
this
означает объект ajax, у которого нет свойства userid.
jQuery не будет знать, откуда вы взяли функцию обратного вызова, поэтому он не может автоматически установить this
для вас.
Что вам нужно сделать, это сохранить ссылку billybob
(или любой экземпляр CurrentUser
) и использовать ее в обратном вызове следующим образом:
function CurrentUser() {
var self = this;
$.get("../../build/ajaxes/account/get_user_object_data.php", function(data) {
self.userId = data.userId; //self refers to what this refered to earlier. I.E. billybob.
console.log(data.userId, self.userid); // This will correctly output "1".
}, "JSON");
}
Также обратите внимание, что:
var billybob = new CurrentUser();
console.log(billybob.userId);
К тому времени, когда вы звоните console.log
(т.е. сразу после создания billybob
), запрос ajax еще не был выполнен, поэтому он undefined
.