对象方法不是函数

时间:2015-12-11 23:56:20

标签: javascript jquery

TL; DR for (car in carList) {...}哪个carList是数组有什么问题?

我的课程Car的方法为reset()。在实例化时,Car对象将自己添加到汽车列表中。我想在for循环中使用方法reset()。这是我的(减少的)代码:

$(document).ready(function() {
    var carList = [];

    function Car(speed) {
        carList.push($(this));
        console.log(carList);
        ...
        this.reset = function() {
            // Does some resetting stuff
        };
    }

    car1 = new Car(0.4);
    car2 = new Car(0.1);

    for (car in carList) {
        car.reset();
    }
});

这会产生Uncaught TypeError。控制台日志是

> [m.fn.init[1]]
> [m.fn.init[1], m.fn.init[1]]
> Uncaught TypeError: car.reset is not a function

但是如果我在控制台中输入car1.reset(),它就可以了。这是为什么?

2 个答案:

答案 0 :(得分:2)

function Car(speed) {
    carList.push($(this));

你是jQuery-ifying Car对象由于某种原因,但它不是一个DOM元素所以它没有任何意义。

将其更改为:

function Car(speed) {
    carList.push(this);

答案 1 :(得分:2)

你的循环做错了。它应该是:

for (var i in carList) {
    carList[i].reset();
}

或者,如果您使用的是ES6:

for (var car of carList) {
    car.reset();
}

请参阅for...in loopfor...of loops的文档。

此外,当您推送Car的实例时,您应该使用this而不是$(this),正如@JamesMcLaughlin指出的那样。