我有一个以下 javascript 对象:
var UsersControl = {
users: null,
fetchData: function() {
$.ajax({
type: "GET",
dataType: "json",
context: this,
url: "../php/client/json.php",
data: {
type: "users"
}
}).done(function(response) {
this.users = response;
});
},
getData: function() {
if (this.users == null) {
this.fetchData();
}
return this.users;
}
};
当我运行该getData()
方法时,users
字段已定义,但null
在此调用中返回旧值 ()。在接下来的调用中,将返回适当的值(ajax-ed)。示例 javascript 控制台会话:
> UsersControl
> Object {users: null, fetchData: function, getData: function}
> UsersControl.getData()
> null
> UsersControl
> Object {users: Array[2], fetchData: function, getData: function}
> UsersControl.getData()
> [Object, Object]
看起来 javascript 在调用方法时会记住对象的当前状态 - 并且所有状态更改都将在方法完成后应用。但这使得动态运行修改对象字段成为不可能(就像我以前使用的每种 OOP 语言一样)。或者,简单地说,我在某个地方有一个错误。我将不胜感激有关此主题的任何提示。