对象的属性根据其调用方式返回不同的值

时间:2019-08-13 18:21:24

标签: javascript

我有一个带有某些对象属性的普通对象(不是类实例)数组,我遍历该数组以将类分配给数组元素及其子属性,同时保留值。由于某种原因,输出数组(如果整体上记录到控制台)包含对象,这些对象的子属性(Project属性)具有Project类的默认构造函数值(输入数组元素的“ project”属性值来自输入数组)丢失)。但是,如果我记录数组的单个元素,它确实包含具有正确值的“ project”属性(并且Project类也已正确应用)。控制台登录我的代码是在连续的代码行中完成的,它们之间没有任何关系!

这怎么可能?什么样的问题显示出这种奇怪的症状?

const workArr = tasksList.map(element => {
    element = Object.assign(new Task(), element);
    delete element.project; // Task's constructor contains project: new Project(), so 
                            // I'm removing this property to have it clean
    element.project = new Project({ ID: projectID, defaultProject: false });
    element.project = Object.assign(new Project(), element.project);
    return element;
});

console.log(workArr[0].project); // logs correct value of project property from initial 
                            // taskList elements' values. Project class is applied!   
console.log(workArr); // logs array of tasks all of which project properties have the 
        // correct Project class, but their values are defaults of Person constructor(?!)
console.log(workArr[0].project); // logs correct value of project property from initial 
                            // taskListValues. Project class is applied! 


// PROJECT CLASS DEFINITON - ACCESSES VUEX STORE
export class Project {
    constructor({ ID, defaultProject } = { ID: null, defaultProject: false }) {
        this.ID = ID || null;
        this.color = 'black';
        if (ID) {
            this.getInitData();
            return;
        }
        if (defaultProject) {
            this.ID = store.state.userSettings.defaultProject.ID;
        }
    }
    getInitData() {
        const soughtProject = store.state.dictionaries.projectsDictionary.find(element => element.ID === this.ID);
        Object.keys(this).forEach(key => {
            this[key] = soughtProject[key];
        });
    };
}

备注:

1)重要的是:此过程在重新加载后第一次运行或通过父方法连续第二次运行时正确运行(也可以调用类似的过程从服务器加载和处理其他对象) 。我想问题可能就在这里,但是整个代码太大了,无法提出问题。而且我看不到其他那些程序如何以这种特定方式影响这一程序?我不知道如何进行更多调试,因为当我查看单个元素时,它似乎已正确处理!

我只是希望有人可以指出我的大致方向,以寻求进一步的帮助。

2)数组来自vue-resource HTTP响应,但是我不知道这是否重要。使用json()方法处理响应对此问题没有影响。

3)我玩过Person构造函数,但似乎工作正常。

4)我还尝试确保为项目属性调用“新项目”的Task构造函数不会导致此问题,因此在将Task类应用于任务元素之后,我删除了项目属性并分配了一个新属性。没有帮助。

5)这里没有异步代码。此外,添加了第三个日志以验证这种可能性。

0 个答案:

没有答案