未捕获的TypeError:对象没有方法... Javascript

时间:2012-01-31 13:01:30

标签: javascript javascript-objects typeerror

我遇到一个问题,我收到的错误是......

  

“未捕获的TypeError:对象f771b328ab06没有方法'addLocation'”

我真的不确定是什么导致了这一点。 'f771b328ab06'是错误中的用户ID。我可以添加新用户并防止用户被复制,但当我尝试将他们的位置添加到列表时,我收到此错误。

有人看到出了什么问题吗?错误也发生在初始化函数的else语句中(如果用户ID存在,只需附加位置而不创建新用户)。我在代码中有一些注释,我很确定这部分是由于我修改了另一个用户提供的示例。

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);

由于我从手机获取ID并且不需要在此处生成(仅接收它),因此我注释掉了创建随机ID的部分。在执行此操作时,我必须在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];
};

如果有人有任何建议我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式获取user_id:

var user_id = data[0];

所以它是json答案的一部分:可能是字符串或其他字典,这不能是用户对象。您应该尝试通过以下方式更新“if”块中成功函数中的代码:

user = users.createUser(user_id);

//The following line is a non sense for me you put an int inside 
//an internal structure of your class that should contain object
//users.users[user_id] = "1"; 

user.addLocation(latitude, longitude);