【问题标题】:How to use a function to instantiate values in an empty object如何使用函数实例化空对象中的值
【发布时间】:2018-04-27 23:03:04
【问题描述】:

我无法使用函数向空对象添加值:

我正在尝试使用此代码根据随机数生成汽车对象,这些随机数从数组中提取值并将它们添加到空对象中

var makes = ["BMW", "Audi", "Mercedez", "Range Rover", "Lexus"];
var models= ["M Series", "S Series", "AMG", "Explorer", "F Series"];
var years = [2003, 2017, 2018, 1993, 2006];
var colors = ["black", "red", "blue", "silver", "Red"];
var convertibles = [true, false];

var rand1 = Math.floor(Math.random() * makes.length);
var rand2 = Math.floor(Math.random() * models.length);
var rand3 = Math.floor(Math.random() * years.length);
var rand4 = Math.floor(Math.random() * colors.length);
var rand5 = Math.floor(Math.random() * 5) + 1; //using this one to determine passenger
var rand6 = Math.floor(Math.random() * 2); //using this one to determine whether it's a convertible or not

function makeCar(newCar){
    newCar = {
        make: makes[rand1],
        model: models[rand2],
        year: years[rand3],
        color: colors[rand4],
        passengers: rand5,
        convertible: convertibles[rand6],
        mileage: 0
    };

    return newCar;


}

var Beamer = {};

makeCar(Beamer);

console.log(Beamer);

但是,每当我在 Firefox 的 Web 控制台中运行它时,我都会得到:

{}
​
__proto__: {…}

我正在使用教科书 Headstart: javascript,我看到您可以像这样创建一个空对象:

var lookMaNoProps = { };

然后您可以像这样动态添加到所述空对象:

var lookMaNoProps = { }; lookMaNoProps.age = 10;
if (lookMaNoProps.age > 5) {
lookMaNoProps.school = "Elementary";}

​​​​

只是在试图理解为什么我的没有通过或者是我的语法错误时遇到了一点麻烦。

谢谢

【问题讨论】:

  • 请注意,每次调用makeCar() 时都会使用相同的随机值。您可能希望在函数内设置变量,以便每次都能得到不同的汽车。
  • 啊,我现在明白了。由于它们是在函数外部创建的,它们是静态的,但是一旦我将它们放入函数中,就好像它们被一遍又一遍地创建并获取新的随机值

标签: javascript arrays function object


【解决方案1】:

您正在将一个对象传递给您的函数,但随后您正在重新分配一个您返回的新对象,然后不再使用。 你应该这样做:

function makeCar(){
    var newCar = {
        make: makes[rand1],
        model: models[rand2],
        year: years[rand3],
        color: colors[rand4],
        passengers: rand5,
        convertible: convertibles[rand6],
        mileage: 0
    };

    return newCar;


}

var Beamer = makeCar();

或者如果你想改变传递的对象:

function makeCar(newCar){
    Object.assign(newCar, {
        make: makes[rand1],
        model: models[rand2],
        year: years[rand3],
        color: colors[rand4],
        passengers: rand5,
        convertible: convertibles[rand6],
        mileage: 0
    });
}

var Beamer = {};

makeCar(Beamer);

【讨论】:

  • 不知道为什么有人反对这个。这与我 1 秒后发布的答案几乎相同。
  • 非常感谢,我现在明白了。如果要更改已创建的对象,则第二个会派上用场。
【解决方案2】:

函数makeCar(newCar) 返回一个newCar,但您没有将它保存到对象Beamer,所以它保持为空。

var makes = ["BMW", "Audi", "Mercedez", "Range Rover", "Lexus"];
    var models= ["M Series", "S Series", "AMG", "Explorer", "F Series"];
    var years = [2003, 2017, 2018, 1993, 2006];
    var colors = ["black", "red", "blue", "silver", "Red"];
    var convertibles = [true, false];
    
    var rand1 = Math.floor(Math.random() * makes.length);
    var rand2 = Math.floor(Math.random() * models.length);
    var rand3 = Math.floor(Math.random() * years.length);
    var rand4 = Math.floor(Math.random() * colors.length);
    var rand5 = Math.floor(Math.random() * 5) + 1; //using this one to determine passenger
    var rand6 = Math.floor(Math.random() * 2); //using this one to determine whether it's a convertible or not
    
    function makeCar(){
        var newCar = {
            make: makes[rand1],
            model: models[rand2],
            year: years[rand3],
            color: colors[rand4],
            passengers: rand5,
            convertible: convertibles[rand6],
            mileage: 0
        };
    
        return newCar;
    
    
    }
    
    var Beamer = {};
    
    Beamer = makeCar();
    
    console.log(Beamer);

【讨论】:

  • 我是个白痴。感谢您指出。我一直在尝试将空对象传入并从函数中推送值,但我意识到我需要使用函数将值分配给对象本身。
  • 很高兴它帮助了你:)
猜你喜欢
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多