Я имею вопрос, где я получаю ошибку говорит ...Uncaught TypeError: Объект не имеет методы ... Javascript
"Uncaught TypeError: Object f771b328ab06 has no method 'addLocation'"
Я действительно не уверен, что причина этого. 'f771b328ab06'
- это идентификатор пользователя в ошибке. Я могу добавить нового пользователя и предотвратить дублирование пользователей, но когда я попытаюсь добавить их местоположение в список, я получаю эту ошибку.
Кто-нибудь видит, что происходит не так? Ошибка также возникает в операторе инициализации else
(если идентификатор пользователя существует, просто добавьте его и не создавайте нового пользователя). У меня есть некоторые примечания в коде, и я уверен, что это отчасти связано с тем, как я изменил пример, предоставленный другим пользователем.
function User(id) {
this.id = id;
this.locations = [];
this.getId = function() {
return this.id;
};
this.addLocation = function(latitude, longitude) {
this.locations[this.locations.length] = new google.maps.LatLng(latitude, longitude);
alert("User ID:");
};
this.lastLocation = function() {
return this.locations[this.locations.length - 1];
};
this.removeLastLocation = function() {
return this.locations.pop();
};
}
function Users() {
this.users = {};
//this.generateId = function() { //I have omitted this section since I send
//return Math.random(); //an ID from the Android app. This is part of
//}; //the problem.
this.createUser = function(id) {
this.users[id] = new User(id);
return this.users[id];
};
this.getUser = function(id) {
return this.users[id];
};
this.removeUser = function(id) {
var user = this.getUser(id);
delete this.users[id];
return user;
};
}
var users = new Users();
function initialize() {
alert("Start");
$.ajax({
url: 'api.php',
dataType: 'json',
success: function(data){
var user_id = data[0];
var latitude = data[1];
var longitude = data[2];
if (typeof users.users[user_id] === 'undefined') {
users.createUser(user_id);
users.users[user_id] = "1";
user_id.addLocation(latitude, longitude); // this is where the error occurs
}
else {
user_id.addLocation(latitude, longitude); //here too
alert(latitude);
}
}
})
}
setInterval(initialize, 1000);
Поскольку я получить идентификатор из телефона и не нужно, чтобы создать его здесь (только получить его), я закомментировать ту часть, которая создает случайный идентификатор. При этом мне пришлось добавить параметр в метод createUser
в пределах Users()
, чтобы я мог передать ID в качестве аргумента из Initialize()
. Смотрите изменения в createUser
ниже:
Перед, с генерируемым ID (часть, где число генерируется в приведенном выше блока кода с комментариями):
this.createUser = function() {
var id = this.generateId();
this.users[id] = new User(id);
return this.users[id];
};
После, с ID передается в качестве аргумент:
this.createUser = function(id) {
this.users[id] = new User(id);
return this.users[id];
};
Если у кого-то есть предложения, я бы очень признателен. Благодаря!
Ну, я новичок в JS, и я просто хотел, чтобы иметь возможность искать ключи, чтобы предотвратить идентификаторы из дублируется , Я помещаю «1» там как заполнитель. Есть ли лучший способ сделать это? – mkyong
Я понял. Я не определил пользователя в статусе if. К сожалению. Я прокомментировал раздел 'users.users [user_id] =" 1 ";' и, похоже, работает нормально. Спасибо за понимание. – mkyong
Если вы новый Checkout Firebug, это может действительно помочь вам отладить ваш код. – AsTeR