在控制台上打印出对象时遇到问题

时间:2018-09-06 12:07:39

标签: javascript prototype javascript-objects

我尝试使用给定值创建汽车对象。当函数正常工作时,我在控制台上打印了它们,一切似乎都很好,但是,当我看一下car2的属性时,没有值分配它。我的代码如下。

            function Car()
        {
            this.brand = "";
            this.wheel = 0;
            this.crash = false;
        }

  Car.prototype.createNewCar2 = function(array)
        {
            for(var i=0; i < array.length; i++)
                {
                    Object.keys(this)[i] = array[i];  
                    console.log(Object.keys(this)[i]);
                    console.log(array[i]);
                }
        }

        var car2 = new Car();
        car2.createNewCar2(["bmw",12,true]);
        console.log(car2);

当我创建新车时,我将这些值分配给正确的索引。我在console.log他们时看到它。但是,创建后,未将值分配给汽车对象。我不知道是什么问题。提前致谢。我的输出如下

brand
bmw
wheel
12
crash
true
Car {brand: "", wheel: 0, crash: false}

1 个答案:

答案 0 :(得分:1)

实际上,您不是在使用this将值分配给对象的属性。您只是在覆盖对象的key。您需要使用this分配对象的值:

var keys = Object.keys(this);
this[keys[i]] = array[i];

function Car() {
  this.brand = "";
  this.wheel = 0;
  this.crash = false;
}

Car.prototype.createNewCar2 = function(array) {
  var keys = Object.keys(this);
  for (var i = 0; i < array.length; i++) {
    this[keys[i]] = array[i];
    console.log(Object.keys(this)[i]);
    console.log(array[i]);
  }
}

var car2 = new Car();
car2.createNewCar2(["bmw", 12, true]);
console.log(car2);