使用JSON创建对象的实例

新手需要

我正在尝试学习编程。我已经遍历了在线教程站点列表,并且坚持使用一种我认为对我来说非常重要的东西。

我的问题:

  1. (这是我最想了解的内容)在我的for ... in循环中,为什​​么使用“联系人”构造函数创建新的“ obj”对象有效?似乎每次循环时我都需要一个不同的名称,这样我才不会覆盖之前创建过的对象。如果这是正确的,如果我事先不知道联系的数量或价值,该怎么办?此外,为什么控制台日志中任何对象的标题都没有obj?我对创建对象实例的含义感到困惑吗?这些实例的名称不重要吗?

  2. 为什么所有属性都未定义?应该从临时“ i”变量引用属性吗?

用总数未知的数据创建对象似乎很重要。不幸的是,像Codecademy之类的地方在这里落空。您总是手动创建具有给您的硬编码名称的对象的新实例。但是,如果有两个相同的名字怎么办?

非常感谢您对我的帮助。不要阻止我告诉我可能正在做的其他愚蠢的事情。

这是控制台屏幕截图的链接-http: //i.imgur.com/TK4dtfV.png

var TestApp = {};

// my data... taken from wherever
TestApp.jsonContacts = {
    contact1: {
        name: "Ethan",
        age: 24
    },
    contact2: {
        name: "Evan",
        age: 30
    },
    contact3: {
        name: "Paul",
        age: 9000
    }
};

// I know this is silly, just let me pretend...
TestApp.jsonStrung = JSON.stringify(TestApp.jsonContacts);

TestApp.globalContactList = [];

// my constructor function to create instances of Contact
TestApp.Contact = function(name, age){
    this.name = name;
    this.age = age;
    TestApp.globalContactList.push(this);
};

// where I'm taking data and creating new Contact objects
TestApp.instantiateObjects = function(){
    // I know this is silly, just let me pretend...
    var jsonUnstrung = JSON.parse(TestApp.jsonStrung);
    // I think I'm looping through the first set of objects sitting in jsonContacts
    for (var i in jsonUnstrung) {
        var obj = new TestApp.Contact(i.name, i.age);
        console.log(obj);
    }
    console.log(TestApp.globalContactList);
};

TestApp.instantiateObjects();
JLRishe

在我的for ... in循环中,为什​​么使用“联系人”构造函数创建新的“ obj”对象有效?

变量只是值的存放位置。这不是价值本身。如果覆盖新值的变量,其持有的前值将继续只要存在一些持有对它的引用; 只是变量不再引用它了。

似乎每次循环时我都需要一个不同的名称,这样我才不会覆盖之前创建过的对象。

不,你没有。一个变量是好的,只要你你分配变量到下一个值之前与价值的东西。

如果这是正确的,如果我事先不知道联系的数量或价值,该怎么办?

有多少都没关系。

此外,为什么控制台日志中任何对象的标题都没有obj?

console.log()打印出传递给它的值。它不关心(不知道)有关传递给它变量的任何信息

我对创建对象实例的含义感到困惑吗?

好像是 创建对象的实例会分配一些内存来存储该对象的值。变量使您能够访问该分配的对象。

这些实例的名称不重要吗?

是的,对象实例没有名称。

为什么所有属性都未定义?

i拥有你迭代通过对象的属性名称,所以在这种情况下,字符串"contact1""contact2""contact3"这些字符串没有nameorage属性,因此您的构造函数正在接收两个undefined值。

应该从临时“ i”变量引用属性吗?

您需要i用作属性名称来访问属性值:

var obj = new TestApp.Contact(jsonUnstrung[i].name, jsonUnstrung[i].age);



通常,最好不要TestApp.globalContactList.push(this);在构造函数中产生副作用在某些情况下,这样做是有道理的,但在大多数情况下,最好删除该行并这样做:

for (var i in jsonUnstrung) {
    var contact = jsonUnstrung[i];
    var obj = new TestApp.Contact(contact.name, contact.age);
    console.log(obj);
    TestApp.globalContactList.push(obj);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章