【问题标题】:Having a problem about printing out object on console在控制台上打印对象时遇到问题
【发布时间】:2019-02-11 16:46:54
【问题描述】:

我尝试用给定的值创建一个汽车对象。当功能正常工作时,我在控制台上打印它们,一切似乎都很好,但是,当我查看 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);

当我创建 newcar 时,我将值分配给正确的索引。当我控制台记录它们时,我看到了它。但是在创建之后,没有为汽车对象分配任何值。我无法弄清楚是什么问题。提前致谢。我的输出如下

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

【问题讨论】:

  • 这是做什么的:Object.keys(this)[i] = array[i]?你必须做this[propertyName] = value
  • 获取 Car 对象的属性并将其分配到数组中的元素
  • @SüleymanAcar 不要那样做,Object.keys 不保证财产秩序。而是明确写出[this.brand, this.wheel, this.crash] = array;。或者更好的是,不要将数组作为参数,而是使用多个参数?
  • 您是对的,但我只是想获得新的方法来做到这一点,但感谢您的推荐。 @Bergi

标签: javascript prototype javascript-objects


【解决方案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);

【讨论】:

  • Cyristal clear 先生。谢谢你的解释。 @Angit Agarwal
  • @SüleymanAcar 虽然这是一种方法,但理想情况下,它应该在构造函数中完成
  • @Rajesh 同意你的看法。答案是根据 OP 的代码上下文给出的
  • @AnkitAgarwal 是的。我明白。因此添加了一条评论作为警告。虽然这可以改进,但我理解的问题属于印刷领域,因此没有回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2022-06-16
  • 2022-01-20
相关资源
最近更新 更多