Что не так в моем коде JavaScript? - PullRequest
1 голос
/ 30 декабря 2010

Я не могу понять, что не так.

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {
    this.passengers = passengers;
    this.maxLoad = maxLoad;
    this.wheels = wheels;
    this.doors = doors;
    this.maxSpeed = maxSpeed;
};
var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h");
var output = new Array();
for (var i = 0; i < ferrari.length; i++) {
    for (var a in ferrari) {
        output[i] = a;
    }
}
document.getElementById('ELEMENTHERE').innerHTML = (output.join(" "));

Ответы [ 6 ]

2 голосов
/ 30 декабря 2010
for (var i = 0; i < ferrari.length; i++) {

ferrari не является массивом, но вы пытаетесь получить к нему доступ, как он есть.Удалите эту и соответствующую ей конечную скобку.

Вы также должны изменить output[i] = ...; на output.push(...); или output[output.length] = ...;, что исключит необходимость увеличения i вручную.

1 голос
/ 30 декабря 2010
for (var i in ferrari) output.push(ferrari[i]);

Это было бы немного надежнее:

for (var i in ferrari)
  if (ferrari.hasOwnProperty(i))
    output.push(ferrari[i]);
1 голос
/ 30 декабря 2010

Из того, что я вижу, ваш for...in зацикливается на том же объекте, что и внешний for.Это установит для каждого элемента output последний ключ из ferrari, если ferrari имеет длину, или выдаст ошибки о неопределенных свойствах, если это не так.

То, что вы, вероятно, хотелисделать вместо этого:

for (var a in ferrari) {
    output[output.length] = a; // or ferrari[a] if you wanted values, not keys
}

и полностью избавиться от внешней for петли.

0 голосов
/ 30 декабря 2010

почему бы просто не переопределить toString () для объекта?

var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {
  this.passengers = passengers;
  this.maxLoad = maxLoad;
  this.wheels = wheels;
  this.doors = doors;
  this.maxSpeed = maxSpeed;
  this.toString = function() {
    return this.passengers + " " + this.maxLoad + " " + this.wheels + " " + this.doors + " " + this.maxSpeed;
  };
};
0 голосов
/ 30 декабря 2010

ferrai - это Объект, и у него нет свойства по длине имени (как у массива).Измените ваш код следующим образом:

<script type="text/javascript">
        var CarObj = function(passengers, maxLoad, wheels, doors, maxSpeed) {     
            this.passengers = passengers;     
            this.maxLoad = maxLoad;     
            this.wheels = wheels;     
            this.doors = doors;     
            this.maxSpeed = maxSpeed; 
        }; 
        var ferrari = new CarObj(4, "700kg", 4, 2, "360km/h"); 
        var output = new Array(); 
        var i=0;
            for (var a in ferrari) 
            {
                output[i] = a;     
                i++;
            } 
        document.getElementById('ELEMENTHERE').innerHTML = (output.join(" "));
  </script>
0 голосов
/ 30 декабря 2010

Вы имеете в виду

i = 0;
for (var a in ferrari) {
    output[i++] = a;
}

?Ferrari не имеет свойства длины.

...