存储对地址簿应用程序实例化对象的引用

Storing references to instantiated objects for an address book app

我正在尝试学习如何编程,但我被 Codecademy 等人困住了。阿尔。不解释。他们总是教您如何将名称硬编码到实例化对象,以便您以后可以引用它们。我需要知道如何处理动态联系人列表。

我想知道如何智能地存储对我正在创建的对象的引用,以便我可以知道将来实例化对象的位置。

例如,如果下面的这个应用程序代表某个地址簿应用程序的开始,我将如何将用户在 DOM 中的输入连接到 Javascript 中的实际对象?我的意思不是解释如何使用事件侦听器,而是我可以使用哪些数据 link 浏览器中的某个联系人与我的数据数组中的联系人。

目前,我只是将所有内容都放入一个数组中,但我不确定应该使用什么作为标识符。当然有数组的索引,但是如果我不知道 json 数据列表中的联系人,我怎么知道 [0] 是 Ethan 而不是其他可能有的名字在某个时候被添加到 json 列表中?

我应该在这里使用一个数组,还是有一些方法可以使用对象的名称,然后让一堆对象漂浮在周围,稍后我可以在数组外调用它们?

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 it's strung from a server somewhere...
    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;
    };

    // where I'm taking data and creating new Contact objects
    TestApp.instantiateObjects = function(){
        // I know this is silly, just let me pretend I'm parsing it necessarily...
        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(jsonUnstrung[i].name, jsonUnstrung[i].age);
            TestApp.globalContactList.push(obj);
        }
    };

    TestApp.instantiateObjects();

如果您要做的只是将 JSON 转换为可用模型,您可以循环遍历并转换它,例如

TestApp.allContacts = {};

TestApp.instantiateObjects = function(){
    var jsonUnstrung = JSON.parse(TestApp.jsonStrung);

    for (var i in jsonUnstrung) {
        var obj = new TestApp.Contact(jsonUnstrung[i].name, jsonUnstrung[i].age);
        TestApp.allContacts[i] = obj;
    }
};

并且您将拥有所有具有相同密钥的实例。但是,当您将这些对象作为一个组来处理时,您不应该通过它们的键访问它们(除非您正在修改一个特定的对象),而应该遍历整个集合。如果它们以 JSON 或数组形式存储,则可以做到这一点,并且在其他地方都有大量示例。如果您使用的是特定的,您应该可以访问 key/index 以执行您当时需要的任何 replacement/removal。